프로그래밍

책보고 따라하기 5 (파이썬)

구소장 2022. 9. 4. 07:39
728x90

2022.09.2~4.

[Doit! 첫코딩: 보통사람이 알아야 할 프로그래밍 기초 with 파이썬 by 정동균]

 

기초적인 기능과 코드는 어제부로 마무리했고, 오늘은 응용편으로 넘어왔다. 이 책에서는 챕터5와 6에 걸쳐서 일종의 코드를 응용한 특정 프로젝트를 경험해볼 수 있도록 하는데(프로젝트라고 해봤자 코드 20줄도 안되는 그런 아주 단순한 것들), 나름 내가 배운 코드를 이리저리 고민하면서 적용할 수 있도록 연습할 수 있는 좋은 기회였다.

 

이 챕터를, 그리고 이 책을 공부하다보니 몇가지 느낀점이 있다. 

1. 인간은 대단하다. 369 게임을 코드로 구현하는데, 인간이면 별 어려움 없이 배우고 할 수 있는 그 단순한 게임인데, 컴퓨터로 하려니 꽤나 복잡한 것 처럼 보였다. 게임의 메카니즘을 하나씩 쪼개서 생각해야 하고, 그 작은 단위를 어떻게 보여줄 지를 조건과 반복, 그리고 몇가지 기능들을 통해 구현해 내는 것이 참 복잡하다는 생각이 들었다. 

2. 컴퓨터 프로그래밍도 꽤나 대단하다. 그 단순한 것처럼 보였던 게임을 프로그래밍을 통해 비슷하게 구현해 낸다는 것 역시 신기하기도 하고, 꽤나 대단하다는 생각이 든다. 몇가지 단순한 간단한 기능을 통해 인간이 만들어낸 규칙을 구현하고 그 규칙 안에서 특정 동작을 유발한다는 것이 신기하다. 지금은 인간을 화성에 보내는 일에 도전하는 데 이르렀지만, 이런 작고 단순한 동작을 구현하는 것이 그 기초가 되었다는 생각에, 나도 뭔가 큰일을 해 낼 수 있을 것 같다는 자신감이 들었다. - 하지만 내가 적어놓은 코드를 보니, 다시 자신감이 조금 하락하는 것 같기도...ㅎ

3. 코딩에 대해 아직은 잘 모르지만, 이 작업은 뭔가 상상력이 필요한 것 같다. A라는 매커니즘을 구현하기 위해 다양한 방식으로 코드를 작성할 수 있고, 그중에 가장 간단하면서도 하자가 없는 방식을 찾아야 하는데, 이를 잘하려면 먼저 코드를 잘 알아야 하고, 이를 유연하게 적용할 수 있는 상상력이 있으면 좀 더 잘 할 수 있을까 하는 생각이 든다. 또한 꼼꼼한 성격도 도움이 될 수 있을 것 같다는 생각이 든다. 예를 들어, 행사를 개최/진행하는데, 꼼꼼한 성격이라면 다양한 상황을 시뮬레이션해보고 각 상황에 발생할 수 있는 사고, 변수등을 미리 생각해서 대비할 수 있지 않을까? 다행인점은 프로그래밍은 테스트해볼 수 있는 (말 그대로 시뮬레이션..?) 기회가 있어서 좀 낫긴 하겠다는 생각은 든다. 

 

 

- 이 하 코 드s - 

 

 

# ###코딩 응용하기 - 게임만들기###
# #베라31

print('***베라게임을 하겠습니다***')
참가자1 = input('참가자1의 닉네임을 입력해주세요: ')
참가자2 = input('참가자2의 닉네임을 입력해주세요: ')
# 참가자3 = input('참가자3의 닉네임을 입력해주세요: ')

print('게임시작!!')

게임수 = 0
while True:                                                     #이걸 뭐라고 해석해야 돼? while True
    입력값 =int(input('{}님, 숫자 몇개를 부를 건가요? (1~3): '.format(참가자1)))          #3 초과하는 수를 입력하지 못하게 하는 장치를 만들 수 있나?
   
    if 입력값 > 3 or 입력값 <1:
        print('입력값이 올바르지 않습니다. 1~3 사이의 숫자를 입력해주세요.')

    else:
        for 숫자 in range(입력값):      #입력값이 3이면 두번만 반복되는 것 아닌가? 아니다... 0, 1, 2만 하겠구나. 그래서 아래 format에서 1을 더해줘야 함.
            print('{}!'.format(게임수+1+숫자))
       
    게임수 += 입력값                                        #이 코드의 위치가 앞으로 가면 '게임수'카운팅이 오염되므로 이 위치로 와야 함.
    if 게임수 >=31:
        break                   #앞에 계산을 멈춤
       


    입력값 =int(input('{}님, 숫자 몇개를 부를 건가요? (1~3): '.format(참가자2)))          #3 초과하는 수를 입력하지 못하게 하는 장치를 만들 수 있나?
   
    if 입력값 > 3 or 입력값 <1:
        print('입력값이 올바르지 않습니다. 1~3 사이의 숫자를 입력해주세요.')

    else:
        for 숫자 in range(입력값):      #입력값이 3이면 두번만 반복되는 것 아닌가? 아니다... 0, 1, 2만 하겠구나. 그래서 아래 format에서 1을 더해줘야 함.
            print('{}!'.format(게임수+1+숫자))
       
    게임수 += 입력값                                        #이 코드의 위치가 앞으로 가면 '게임수'카운팅이 오염되므로 이 위치로 와야 함.
    if 게임수 >=31:
        break                   #앞에 계산을 멈춤



print('벌칙 당첨!!')            #참가자 이름을 함께 print 할수는 없을까?

# print('게임시작')
# 게임수 = 0
# while True:
#     입력값 = int(input('숫자 몇개를 부를 건가요? (1~3): '))
#     for 숫자 in range(입력값):
#         print('{}!'.format(게임수+1+숫자))

#     게임수 = 게임수 + 입력값
#     if 게임수 >= 31:
#         break

# print('벌칙당첨!')



#게임속 '아무거나'를 코드로 만들기: 무직위 수라고 불리는 랜덤(random: 0보다 크고 1보다 작은 무작위 숫자) 숫자가 사용

#나누기의 계산 값으로 나오는 '나머지'를 무작위 숫자를 만들 때 활용 i.e., 옵션이 네가지인 랜덤상황에서는 숫자를 4로 나누면 나머지는 4개 (0,1,2,3)

#5%4=1
print(5%4)
print(7%5)

import random       #random package 활용
print(random.randint(1,3))



from random import * # * : random 패키지의 모든 것 불러오기 / 보통 import 명령은 코드의 맨 위에 넣어줌.
print('***베라게임을 하겠습니다***')
참가자1 = input('참가자1의 닉네임을 입력해주세요: ')
참가자2 = input('참가자2의 닉네임을 입력해주세요: ')
print('알파고님이 게임에 참여하겠습니다')

print('게임시작!!')

게임수 = 0
while True:                                                     #이걸 뭐라고 해석해야 돼? while True
    입력값 =int(input('{}님, 숫자 몇개를 부를 건가요? (1~3): '.format(참가자1)))          #3 초과하는 수를 입력하지 못하게 하는 장치를 만들 수 있나?
   
    if 입력값 > 3 or 입력값 <1:
        print('입력값이 올바르지 않습니다. 1~3 사이의 숫자를 입력해주세요.')

    else:
        for 숫자 in range(입력값):      #입력값이 3이면 두번만 반복되는 것 아닌가? 아니다... 0, 1, 2만 하겠구나. 그래서 아래 format에서 1을 더해줘야 함.
            print('{}: {}!'.format(참가자1, 게임수+1+숫자))
       
    게임수 += 입력값                                        #이 코드의 위치가 앞으로 가면 '게임수'카운팅이 오염되므로 이 위치로 와야 함.
    if 게임수 >=31:
        break                   #앞에 계산을 멈춤
       


    입력값 =int(input('{}님, 숫자 몇개를 부를 건가요? (1~3): '.format(참가자2)))          #3 초과하는 수를 입력하지 못하게 하는 장치를 만들 수 있나?
   
    if 입력값 > 3 or 입력값 <1:
        print('입력값이 올바르지 않습니다. 1~3 사이의 숫자를 입력해주세요.')

    else:
        for 숫자 in range(입력값):      #입력값이 3이면 두번만 반복되는 것 아닌가? 아니다... 0, 1, 2만 하겠구나. 그래서 아래 format에서 1을 더해줘야 함.
            print('{}: {}!'.format(참가자2, 게임수+1+숫자))
       
    게임수 += 입력값                                        #이 코드의 위치가 앞으로 가면 '게임수'카운팅이 오염되므로 이 위치로 와야 함.
    if 게임수 >=31:
        break                   #앞에 계산을 멈춤

    입력값 = randint(1,3)
    print('알파고, 숫자 몇개를 부를 건가요?: {}'.format(입력값))
   
    if 입력값 > 3 or 입력값 <1:
        print('입력값이 올바르지 않습니다. 1~3 사이의 숫자를 입력해주세요.')

    else:
        for 숫자 in range(입력값):      #입력값이 3이면 두번만 반복되는 것 아닌가? 아니다... 0, 1, 2만 하겠구나. 그래서 아래 format에서 1을 더해줘야 함.
            print('알파고: {}!'.format(게임수+1+숫자))
       
    게임수 += 입력값                                        #이 코드의 위치가 앞으로 가면 '게임수'카운팅이 오염되므로 이 위치로 와야 함.
    if 게임수 >=31:
        break                   #앞에 계산을 멈춤



print('벌칙 당첨!!')            #참가자 이름을 함께 print 할수는 없을까?


#서커스 곡예의 그물망 처리      도전 - 실수하면 특별한 경우로 처리  try ~ except: 프로그램에서 간혹 예외적으로 발생할 수 있는 오류를 처리하는 구문


try:
    오류가 날만한 코드 (도전)

except:
    오류가 났을 때 실행할 코드 (실패했을 때 그물망 공간)

두가지 예외상황 발생
1~3 외의 숫자를 입력할 경우: 조건문으로 확인

숫자가 아닌 문자를 입력하는 경우: try - except 로 확인


from random import * # * : random 패키지의 모든 것 불러오기 / 보통 import 명령은 코드의 맨 위에 넣어줌.
print('***베라게임을 하겠습니다***')
참가자1 = input('참가자1의 닉네임을 입력해주세요: ')
참가자2 = input('참가자2의 닉네임을 입력해주세요: ')
print('알파고님이 게임에 참여하겠습니다')

print('게임시작!!')

게임수 = 0
while True:                                                     #이걸 뭐라고 해석해야 돼? while True: True 나올때 까지 반복?
    while True:
        try:
            입력값 =int(input('{}님, 숫자 몇개를 부를 건가요? (1~3): '.format(참가자1)))          #3 초과하는 수를 입력하지 못하게 하는 장치를 만들 수 있나?
            if 입력값 > 3 or 입력값 <1:
                print('입력값이 올바르지 않습니다. 1~3 사이의 숫자를 입력해주세요.')
            else:
                break
           
        except:
            print('잘못 입력했습니다.')

    for 숫자 in range(입력값):      #입력값이 3이면 두번만 반복되는 것 아닌가? 아니다... 0, 1, 2만 하겠구나. 그래서 아래 format에서 1을 더해줘야 함.
        print('{}: {}!'.format(참가자1, 게임수+1+숫자))

           
    게임수 += 입력값                                        #이 코드의 위치가 앞으로 가면 '게임수'카운팅이 오염되므로 이 위치로 와야 함.
    if 게임수 >=31:
        break                   #앞에 계산을 멈춤
       

    while True:
        try:
            입력값 =int(input('{}님, 숫자 몇개를 부를 건가요? (1~3): '.format(참가자2)))          #3 초과하는 수를 입력하지 못하게 하는 장치를 만들 수 있나?
            if 입력값 > 3 or 입력값 <1:
                print('입력값이 올바르지 않습니다. 1~3 사이의 숫자를 입력해주세요.')
            else:
                break
           
        except:
            print('잘못 입력했습니다.')

    for 숫자 in range(입력값):      #입력값이 3이면 두번만 반복되는 것 아닌가? 아니다... 0, 1, 2만 하겠구나. 그래서 아래 format에서 1을 더해줘야 함.
        print('{}: {}!'.format(참가자2, 게임수+1+숫자))

    게임수 += 입력값                                        #이 코드의 위치가 앞으로 가면 '게임수'카운팅이 오염되므로 이 위치로 와야 함.
    if 게임수 >=31:
        break                   #앞에 계산을 멈춤

    입력값 = randint(1,3)
    print('알파고, 숫자 몇개를 부를 건가요?: {}'.format(입력값))
   
    if 입력값 > 3 or 입력값 <1:
        print('입력값이 올바르지 않습니다. 1~3 사이의 숫자를 입력해주세요.')

    else:
        for 숫자 in range(입력값):      #입력값이 3이면 두번만 반복되는 것 아닌가? 아니다... 0, 1, 2만 하겠구나. 그래서 아래 format에서 1을 더해줘야 함.
            print('알파고: {}!'.format(게임수+1+숫자))
       
    게임수 += 입력값                                        #이 코드의 위치가 앞으로 가면 '게임수'카운팅이 오염되므로 이 위치로 와야 함.
    if 게임수 >=31:
        break                   #앞에 계산을 멈춤



print('벌칙 당첨!!')            #참가자 이름을 함께 print 할수는 없을까?



## 함수를 사용해서 본문 코드 단순화하기.
from random import * # * : random 패키지의 모든 것 불러오기 / 보통 import 명령은 코드의 맨 위에 넣어줌.
print('***베라게임을 하겠습니다***')
참가자1 = input('참가자1의 닉네임을 입력해주세요: ')
# 참가자2 = input('참가자2의 닉네임을 입력해주세요: ')
print('알파고님이 게임에 참여하겠습니다')

def 원하는정수값받기(질문):         #반복되는 예외처리와 조건문을 정의하여 본문에 집어넣기.
    while True:
        try:
            입력값 =int(input(질문))          #3 초과하는 수를 입력하지 못하게 하는 장치를 만들 수 있나?
            if 입력값 <= 3 and 입력값 >=1:
                break
            else:
                print('입력값이 올바르지 않습니다. 1~3 사이의 숫자를 입력해주세요.')
           
        except:
            print('잘못 입력했습니다. 숫자를 입력하세요.')

    return 입력값                       #이부분의 역할은?

print('게임시작!!')
게임수 = 0
while True:
    입력값 = 원하는정수값받기('{}님! 숫자 몇개를 부를 건가요? (1~3): '.format(참가자1))
    for 숫자 in range(입력값):
        print('{}!'.format(게임수+1+숫자))
    게임수+=입력값
    if(게임수>=31):
        break

    입력값= randint(1,3)
    print('[컴퓨터] 숫자 몇개를 부를 건가요?: {}'.format(입력값))
    for 숫자 in range(입력값):
        print('{}!' .format(게임수+1+숫자))
   
    게임수+=입력값
    if (게임수 >=31):
        break
print('벌칙당첨')


# sleep 프로그램 잠재우기 (시간 늦추기?) - lagging?

import time
print ('다음 문장은 5초 후에 출력 됩니다.')
time.sleep(5)
print('안녕!')

# oR
from time import *
print('다음 문장은 3초 후에 출력됩니다.')

sleep (3)
print('여보세요?')

print('다음 문장은 0.5초 후에 출력됩니다.')
sleep (0.5)
print('뭐가 지나갔냐?')


from random import * # * : random 패키지의 모든 것 불러오기 / 보통 import 명령은 코드의 맨 위에 넣어줌.
from time import *

print('***베라게임을 하겠습니다***')
참가자1 = input('참가자1의 닉네임을 입력해주세요: ')
# 참가자2 = input('참가자2의 닉네임을 입력해주세요: ')
print('알파고님이 게임에 참여하겠습니다')

def 원하는정수값받기(질문):         #반복되는 예외처리와 조건문을 정의하여 본문에 집어넣기.
    while True:
        try:
            입력값 =int(input(질문))          #3 초과하는 수를 입력하지 못하게 하는 장치를 만들 수 있나?
            if 입력값 <= 3 and 입력값 >=1:
                break
            else:
                print('입력값이 올바르지 않습니다. 1~3 사이의 숫자를 입력해주세요.')
           
        except:
            print('잘못 입력했습니다. 숫자를 입력하세요.')

    return 입력값                       #이부분의 역할은?

print('게임시작!!')
게임수 = 0
while True:
    입력값 = 원하는정수값받기('{}님! 숫자 몇개를 부를 건가요? (1~3): '.format(참가자1))
    for 숫자 in range(입력값):
        print('{}!'.format(게임수+1+숫자))
    게임수+=입력값
    if(게임수>=31):
        break

    입력값= randint(1,3)
    print('[컴퓨터] 숫자 몇개를 부를 건가요?: {}'.format(입력값))
    sleep(2)
    for 숫자 in range(입력값):
        print('{}!' .format(게임수+1+숫자))
   
    게임수+=입력값
    if (게임수 >=31):
        break
print('벌칙당첨')


#스레드: 한번에 여러가지 하는 척.
#멀티스레딩: 컴퓨터가 업무를 동시에 하는 것이 아니라 여러가지 업무를 번갈아 하는데, 우리 눈에는 마치 동시에 하는 것 처럼 보임.

class 숫자세기:
    def __init__(self, 나의이름):
        self.나의이름 = 나의이름
    def 셈하기(self):
        for 숫자 in range(0,5):
            print(self.나의이름, 숫자)

첫번째 = 숫자세기 ('첫번째')
두번째 = 숫자세기('두번째')

첫번째.셈하기()
두번째.셈하기()