[Python] CHAP. 04
구조적 프로그래밍
- 주어진 큰 문제를 작은 문제로 쪼갠다.
- 작은 문제를 더 작은 문제로 쪼갠다.
- 쪼개진 작은 문제는 구현하기 쉽다.
- 탑-다운 방식이라고 한다.
- 탑-다운 방식의 코딩을 구조적 프로그래밍이라고 한다.
- 함수가 핵심
- 함수가 제공되는 언어는 모두 구조적 프로그래밍이 가능
- 대표적 구조적 프로그래밍 언어는 c언어
- while, break
i = 0
while(i < 10):
print(i)
i = i + 1
if (i == 2):
break
print("end of 'while' ")
i = 0
while (True):
print(i)
i = i + 1
if (i == 2):
break
print("end of 'while' ")
[결과]
0
1
2
end of 'while'
- 예시) 메뉴를 만들어보자
import random
def addTest():
a = random.randint(0, 10)
b = random.randint(0, 10)
c = a + b
print(a, "+", b, "=", end="")
ans = int(input())
if ans == c:
return 1
else:
return 0
def subTest():
a = random.randint(0, 10)
b = random.randint(0, 10)
c = a - b
print(a, "-", b, "=", end="")
ans = int(input())
if ans == c:
return 1
else:
return 0
score = 0
while(True):
print("-----")
print("[1] add")
print("[2] substract")
print("[q] exit")
print("-----")
m = input("select menu:")
if (m =='q'):
break
elif(m=='1'):
score += addTest()
elif(m=='2'):
score += subTest()
print("your score is ", score)
- "1234"를 1234로 바꾸어본다
- 문자열 '1234'를 숫자 1234(1천2백3십4)로 바꾸기
zero = ord('0')
print(zero)
a = '1'
b = '2'
c = '3'
d = '4'
a = ord(a)
b = ord(b)
c = ord(c)
d = ord(d)
print('ascii code = ', a, b, c, d)
a -= zero
b -= zero
c -= zero
d -= zero
print('digit number = ', a, b, c, d)
digit = a * 1000 + b * 100 + c * 10 + d * 1
print('digit = ', digit)
print('digit = {:d}'. format(digit))
- 자릿수에 상관없이 동작하도록 범용적으로 구현
- 문자열은 첨자를 통해 개별 글자에 접근할 수 있다.
>>> s = "1234"
>>> a = len(s) # 문자의 개수를 알려준다
4
>>> s = "1234"
>>> s[0] # 첨자로 개별 값에 접근할 수 있다.
'1' # 첨자는 0부터 3까지
>>> s[1]
'2'
>>> s[2]
'3'
>>> s[3]
'4'
>>> s[0] # 값을 할당할 수는 없다
Error
>> s[-1] # -부호를 붙이면 거꾸로 인덱싱 된다
'4'
def power(n):
p = 1
for i in range(n):
p = p * 10
return p
def myInt(s):
n = len(s)
digit = 0
for i in range(n):
value = ord(s[i]) - ord('0')
digit = digit + value * power(n-1-i)
return 1;
s = '1234'
print("string = '{}'".format(s))
digit = mtInt(s)
print('digit = {:d}'.format(digit))
- 효율적인 코드
def myInt(s):
n = len(s)
power = 1
digit = 0
for i in range(n-1, -1, -1):
value = ord(s[i])-ord('0')
digit = digit + value * power
power = power * 10
return digit
s = '1234'
print("string = '{}'".format(s))
digit = myInt(s)
print('digit = {:d}'.format(digit))
- 달력출력 구현 연습
- 숫자 맞추기 게임 구현
- 컴퓨터가 1에서 10 사이의 숫자를 하나 정합니다. 이 숫자가 무엇인지 맞추는 게임입니다. 게임 플레이어는 숫자 하나를 입력합니다. 컴퓨터가 정한 숫자와 같으면 게임 종료, 컴퓨터가 정한 숫자보다 큰지 작은지 알려줍니다. 몇 번 만에 맞추는지 시도횟수를 출력합니다.
import random
min = 1
max = 10
goal = random.randint(min, max)
trials = 0
bFinish = False
def inputNumber(min, max):
while True:
print('{} ~ {} 숫자를 입력하세요 : '.format(min, max), end='')
a = input()
if len(a) > 2 or len(a) < 1:
print('입력한 문자의 길이가 2보다 크거나 1보다 작습니다')
continue
if len(a) == 2 and a != '10':
print('입력한 문자의 길이가 2인데, 10이 아닙니다')
if len(a) == 1:
if ord(a) < ord('0') or ord(a) > ord('9'):
print('입력한 문자의 길이는 1인데, 0~9 값이 아닙니다')
continue
a = int(a)
if a < min or a > max:
print(min, '~', max, '사이에 정답이 있습니다')
continue
else:
break
return a
while not bFinish:
trials += 1
print(goal)
a = inputNumber(min, max)
if a == goal:
bFinish = True
print("맞추었습니다")
print("시도한 횟수 : ",trials)
else:
if goal < a:
print("입력한 숫자보다 작습니다")
max = a - 1
else:
print("입력한 숫자보다 큽니다")
max = a + 1
print("게임이 종료되었습니다")
- 가위바위보 실습
import random
def no2RockPaperScissors(no):
if no==1:
print("가위")
elif no==2:
print("바위")
elif no==3:
print("보")
def whoWin(you, computer):
if you == computer:
return 0
else:
if you == 1 and computer == 3:
return 1
elif you == 2 and computer == 1:
return 1
elif you == 3 and computer == 2:
return 1
else:
return -1
score = 0
games = 0
bGameOver = False
print()
while not bGameOver:
you = input('[1] 가위, [2] 바위, [3] 보 : ')
if you != '1' and you != '2' and you != '3':
print('잘못 입력하셨습니다')
continue
games += 1
print('게임횟수 : ', games)
you = int(you)
#print(you)
you_str=no2RockPaperScissors(you)
print('당신 : ', you_str)
computer=random.randint(1,3)
#print(computer)
computer_str=no2RockPaperScissors(computer)
print('컴퓨터 : ', computer_str)
winner = whoWin(you, computer)
if winner==0:
winner_str='비겼습니다'
score = 0
elif winner==1:
winner_str='이겼습니다'
score += 1
else:
winner_str='졌습니다'
score = 0
print()
print(winner_str)
print('연속으로 이긴 횟수는', score, '입니다')
print()
if score == 3:
print('당신은', games,'만에 연속으로 3번 이겼습니다')
bGameOver = True
if not bGameOver and games % 5 == 0:
print('게임을 포기하겠습니까? [Y] or [N] : ',end='')
choice = input()
if choice=='Y'or choice=='y':
bGameOver=True
while True:
print('계속하시겠습니까? [Y] or [N] : ', end='')
choice = input()
if choice=='N' or choice=='n' or choice=='Y' or choice=='y':
break
if choice=='N' or choice=='n':
break
print()
print('게임이 종료되었습니다')
Author And Source
이 문제에 관하여([Python] CHAP. 04), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@jyj1055/Python-CHAP.-04저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)