파이썬 for문 질문드립니다.

조회수 1299회

구구단으로 for문 가져 왔는데요..
1단부터 출력 시, interval로 단의 간격을 조절하고 처음은 1단 출력, 마지막은 꼭 9단을 출력하고 싶습니다.
interval이 2이면 1,3,5,7,9 단이 나오고, interval이 7이면 1,8,9 이렇게 출력하고 싶습니다!
기본 이중 for문 하나로 문제를 해결하고 싶었지만, 도저히 안되어 #마지막단 처리를 따로 했습니다.
이중 for문 하나로 처음은1단, 마지막은9단이 출력되도록 처리할 수 있을까요??
방법이 있을꺼 같은데, 잘 안되서 질문올립니다 ㅠㅠ

first = 1
last = 9
interval = 7
# 기본 이중 for문
for i in range(first, last+1, interval):
    if i == last:
        continue
    for j in range(1, 10, 1):
        print(i,j,end='  ')
    print()

#마지막단
for i in range(last, last+1, interval):
    for j in range(1, 10, 1):
        print(i,j,end='  ')
  • (•́ ✖ •̀)
    알 수 없는 사용자
  • 숙제는 스스로 하세요. nowp 2020.3.16 10:51
  • 스스로 하려 하는데, 잘 안되네요ㅠ, 로직 문제인데, 풀 수 있는 실마리가 있을까요? 알 수 없는 사용자 2020.3.16 11:03
  • x * y 인데 y 는 1~9 이잖아요.. x를 인터벌값에 맞게 사전에 리스트화해놓고 하면 편하지않을까요 김호원 2020.3.16 16:54
  • 기본 이중 for문의 마지막 줄에 가장 마지막 i가 9가 아니면 9단 출력 추가 했습니다. 이 경우 for문의 가장 마지막 i를 찾는게 문제의 키였습니다. 알 수 없는 사용자 2020.3.17 09:02

2 답변

  • range(start, stop, step)

    step이 1일 경우를 제외하고는 9를 건너 뛸 가능성이 생기기 때문에 질문의 방식처럼 사용하려면 9를 한 번 더 돌아야 하는 부수 작업을 해야 합니다.

    다음과 같이 해 보세요.

    first = 1
    last = 9
    interval = 3
    
    # 9단을 건너뛰는 것이 문제이니 확실히 9단까지 얻을 수 있는 range를 설정하고
    for i in range(first, last + 1):
        # for문 내부에서 조건문을 통해 필요없는 i값은 건너뛰면 됩니다.
        # 코드의 효율성에 대한 검증은 일단 내버려 두고
        # 조건문에서 무엇을 하려는지 의지(?)가 명확하게 보이며
        # 돌아가긴 하니까 그럭저럭 쓸만한 코드입니다.
        if i != last and interval != 1 and (i - first) % interval != 0:
            continue
        print(i)
    
    # 만약 range()의 step값을 사용하려면
    # 마지막을 건너뛰는 현상을 바로잡아 주어야 합니다.
    # range() 종료 값(stop)을 변경해 주면 last값보다는 크거나 같은 마지막 원소가 추가 됩니다.
    # 이를 이용하여 기존에 누락되었던 마지막 반복 작업을 강제할 수 있습니다.
    for i in range(first, last + interval, interval):
        # 마지막 반복이 가능하다면 조건을 주어 last값을 얻을 수 있습니다.
        i = i if i < last else last
        # 또는
        # i = min(i, last)
        print(i)
    
    • 답을 얻는데 만족하지 마시고 접근법을 봐주세요. 위 말고도 많은 방식이 있습니다. doodoji 2020.3.17 13:01
    • 와, 이런 방법도 있네요. 답변 감사합니다! 알 수 없는 사용자 2020.3.17 15:57
  • first = 1
    last = 9
    interval = 2
    
    while first != last + interval:
        if first > last:
            first = last
        for j in range(1,10):
            print(first,'*',j,'=',first*j)
        first = first + interval
        print()
    

    이렇게 하면 되네요

    • (•́ ✖ •̀)
      알 수 없는 사용자

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)