[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(千二百三十四)
  • に変換
    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))
    共通の

  • -文字列はヘッダーから1文字にアクセスできます.
  • >>> 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('게임이 종료되었습니다')