[Python] CHAP. 04

40919 단어 pythonpython

구조적 프로그래밍

  • 주어진 큰 문제를 작은 문제로 쪼갠다.
  • 작은 문제를 더 작은 문제로 쪼갠다.
  • 쪼개진 작은 문제는 구현하기 쉽다.
  • 탑-다운 방식이라고 한다.
  • 탑-다운 방식의 코딩을 구조적 프로그래밍이라고 한다.
  • 함수가 핵심
  • 함수가 제공되는 언어는 모두 구조적 프로그래밍이 가능
  • 대표적 구조적 프로그래밍 언어는 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('게임이 종료되었습니다')

좋은 웹페이지 즐겨찾기