본문 바로가기

🐍Python

[TIL] 애증의 python for문. 구구단 만들기

언제였을까. for문을 잘 이해했다고 착각한 날이 ^^..
for문을 만들 때마다 막혀서 조교님께 도움을 요청했고 구구단 만들기 과제를 받았다.

 

먼저 for문을 활용한 다른 예제들

scores = [90, 91, 100, 40, 20, 80, 77, 65]
for score in scores:
    print("저는 %d점 입니다." % score)
    if score >= 70:
        print("-> 합격")
    else:
        print("-> 불합격")
        
--------
저는 90점 입니다.
-> 합격
저는 91점 입니다.
-> 합격
저는 100점 입니다.
-> 합격
저는 40점 입니다.
-> 불합격
저는 20점 입니다.
-> 불합격

for문을 만들 때는 score와 scores 처럼 구분하기 쉬운 변수명을 사용하면 좋다고 한다. 나는 변수를 저렇게 만드니까 중간에 오탈자가 많아지던데, 헷갈리지 않게 잘 보면 좋겠다. print() 안에 변수명이 아닌 것들은 모두 '',를 통해 구분해주어야 한다. 

 

suspects = [['거위', '새', '암컷'], ['푸들', '개', '수컷'], ['비글', '개', '암컷']]
for suspect in suspects:
    if suspect[1] == '개' and suspect[2] == '암컷':
        print('범인은', suspect[0], '입니다.')
        
------
범인은 비글 입니다.

suspects라는 리스트 안에, 리스트 값들이 들어있다. 해석을 해보면 
suspect는 suspects 안에 있다. 만약 리스트 suspect의 [1] 인덱스의 값이 '개' 이면서 [2] 인덱스 값이 '암컷'인 것이 있다면 '범인은', 리스트 suspect의 [0] 인덱스값, '입니다'라고 print 해줘. 

and로 조건을 연결해서 출력할 수 있다는 것을 알게 되었다. 리스트 형태의 무언가를 뽑을 때 활용하면 좋겠다.

 

다음은 대망의 구구단 만들기 (삽질주의)

# 형태
n = 2 ~ 9
n * 1 = 1n
n * 2 = 2n
n * 3 = 3n
....
n * 9 = 9n

이런 반복 형태로 만들면 될 것 같아서 우선 형태를 그려보았다.

googoodans = [2, 3, 4, 5, 6, 7, 8, 9]    #gogodans = [2:10] #for i in range(2:10):
for googoodan in googoodans:
    if googoodan == 2:
        print("2단 :", "2 x", 2, "=", 2*googoodan)
        print("2단 :", "2 x", 2, "=", 3*googoodan) 
        print("2단 :", "2 x", 2, "=", 4*googoodan)
        print("2단 :", "2 x", 2, "=", 5*googoodan)
        print("2단 :", "2 x", 2, "=", 6*googoodan)
        print("2단 :", "2 x", 2, "=", 7*googoodan) 
        print("2단 :", "2 x", 2, "=", 8*googoodan)
        print("2단 :", "2 x", 2, "=", 9*googoodan) 
        
---------
2단 : 2 x 2 = 4
2단 : 2 x 2 = 6
2단 : 2 x 2 = 8
2단 : 2 x 2 = 10
2단 : 2 x 2 = 12
2단 : 2 x 2 = 14
2단 : 2 x 2 = 16
2단 : 2 x 2 = 18

위의 동물 예제처럼 구분해서 for문을 만들었는데, 이렇게 일일이 2~9단까지 넣을 순 없을 것 같아 고민에 빠졌다. 

for googoodan in googoodans:
    if googoodan >= 2:
        print("2단 :", "2 x", 1, "=", 1*googoodan)
        print("2단 :", "2 x", 2, "=", 2*googoodan)
        print("2단 :", "2 x", 2, "=", 3*googoodan) 
        print("2단 :", "2 x", 2, "=", 4*googoodan)
        print("2단 :", "2 x", 2, "=", 5*googoodan)
        print("2단 :", "2 x", 2, "=", 6*googoodan)
        print("2단 :", "2 x", 2, "=", 7*googoodan) 
        print("2단 :", "2 x", 2, "=", 8*googoodan)
        print("2단 :", "2 x", 2, "=", 9*googoodan) 
        
------
2단 : 2 x 1 = 2
2단 : 2 x 2 = 4
2단 : 2 x 2 = 6
2단 : 2 x 2 = 8
2단 : 2 x 2 = 10
2단 : 2 x 2 = 12
2단 : 2 x 2 = 14
2단 : 2 x 2 = 16
2단 : 2 x 2 = 18
2단 : 2 x 1 = 3
2단 : 2 x 2 = 6
2단 : 2 x 2 = 9
2단 : 2 x 2 = 12
2단 : 2 x 2 = 15
2단 : 2 x 2 = 18
2단 : 2 x 2 = 21
2단 : 2 x 2 = 24
2단 : 2 x 2 = 27 
.....

 

if googoodan >= 2:으로 바꿔주었더니 결과값이 반복해서 나온다는 걸 알게 되었다. googoodans가 2에서 9까지의 숫자라고 했으니까 반복되는 것. 반복하는 형태는 만든 것 같으니 앞뒤 모양새를 바꾸면 될 것 같군? 

googoodans = [2, 3, 4, 5, 6, 7, 8, 9]
for googoodan in googoodans:
    if googoodan == 2:
        print("구구단 2단 시작")
        print("2 x 1 =", 1*googoodan)
        print(2*googoodan)
        print(3*googoodan) 
        print(4*googoodan)
        print(5*googoodan)
        print(6*googoodan)
        print(7*googoodan) 
        print(8*googoodan)
        print(9*googoodan)
# 이건 알겠는데 어떻게 구구단의 모양새를 갖출까? 

--------
구구단 2단 시작
2 x 1 = 2
4
6
8
10
12
14
16
18

googoodans는 2에서 9까지의 숫자고, 2~9의 숫자에 googoodan (2~9)을 각각 곱하면 반복해서 나올 것 같은데, 결과값만 나오는 것 말고 2 x 1 = 2 같은 수식도 뽑아내고 싶었다. 그리고 이때부터 googoo, gogod... 변수가 헷갈려서 그냥 i로 바꿔주었다. 

googoodan = [2, 3, 4, 5, 6, 7, 8, 9]
for i in googoodan:
    if i >= 2:
        print("구구단", i, "단 시작~")
        print(i, "x 1 =", i*1)
        print(i, "x 2 =", i*2)
        print(i, "x 3 =", i*3)
        print(i, "x 4 =", i*4) 
        print(i, "x 5 =", i*5)
        print(i, "x 6 =", i*6)
        print(i, "x 7 =", i*7)
        print(i, "x 8 =", i*8)
        print(i, "x 9 =", i*9)       

# 와 내가 성공을 하다니!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

갑자기 성공한 코드 등장. 다시 해석해보면 googoodan은 2에서 9까지의 숫자가 포함된 리스트. 만약 i가 2보다 크거나 같다면 print 시작. 9까지 for문이 돌아가다가 멈출 것이다.

제일 처음에는 "구구단", i, "단 시작~"이라고 출력되도록 코드를 입력해주었다. 그리고 print(i, "x 1 =", i*1)과 같은 형태로 가운데 수식은 x 1이라는 문자로 출력되도록 했다. 변수가 i니까 완전 깔끔. 처음에 googoodan 이래서 더 헷갈렸을 수도! 아무튼 성공했다. 이렇게 print를 하면 

구구단 2 단 시작~
2 x 1 = 2
2 x 2 = 4
2 x 3 = 6
2 x 4 = 8
2 x 5 = 10
2 x 6 = 12
2 x 7 = 14
2 x 8 = 16
2 x 9 = 18
구구단 3 단 시작~
3 x 1 = 3
3 x 2 = 6
3 x 3 = 9
3 x 4 = 12
3 x 5 = 15
3 x 6 = 18
3 x 7 = 21
3 x 8 = 24
3 x 9 = 27
구구단 4 단 시작~
4 x 1 = 4
4 x 2 = 8
4 x 3 = 12
4 x 4 = 16
.....

이런 식으로 나온다. 이제 for문 좀 더 알게 된 것 같아 기쁘다.

 

 

 


 

조교님이 알려주신 for문 김 왼손님의 유튜브 강의. 분량도 짧고 재미있음.

for문 : https://www.youtube.com/watch?v=b0-dzKRPKt8&list=PLGPF8gvWLYyontH0PECIUFFUdvATXWQEL&index=33

for 기본문제 1 : https://www.youtube.com/watch?v=8cLoh3HlzNs&list=PLGPF8gvWLYyontH0PECIUFFUdvATXWQEL&index=34

기본문제 2 : https://www.youtube.com/watch?v=ZWfGuzN5qRw&list=PLGPF8gvWLYyontH0PECIUFFUdvATXWQEL&index=38

기본문제 3 : https://www.youtube.com/watch?v=vT4qfqKqP_A&list=PLGPF8gvWLYyontH0PECIUFFUdvATXWQEL&index=46