파이썬 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=' ')
-
(•́ ✖ •̀)
알 수 없는 사용자
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()
이렇게 하면 되네요
-
(•́ ✖ •̀)
알 수 없는 사용자
-
댓글 입력