《python言語プログラム設計基礎》嵩天著-第4章プログラム練習問題解答

26510 ワード

練習問題コード
本を読んで独学の中で、自分の宿題を貼って、みんなが交流して指摘することを歓迎して、いっしょに進歩します~
4.1クイズゲーム
プログラムには0〜9の整数が予め設定されており、ユーザはキーボードで推測数を入力し、推測結果を与え、推測総回数を与える.
# 4.1
from random import randint
num = randint(0,9) #             num = 3
n = 1
while 1:
    a = eval(input("Guess a number from 0 to 9: "))
    if a < num:
        print("Too small.")
        n += 1
    elif a > num:
        print("Too large.")
        n += 1
    else:
        print("Congraduations! Guess {:d} time(s)." .format(n))
        break

結果
Guess a number from 0 to 9: 6
Too large.
Guess a number from 0 to 9: 3
Too small.
Guess a number from 0 to 9: 5
Too large.
Guess a number from 0 to 9: 4
Congraduations! Guess 4 time(s).

4.2異なる文字数の統計
ユーザーはキーボードから1行の文字を入力し、プログラムを作成し、英語の文字、数字、スペース、その他の文字の個数を統計します.
# 4.2
string = input("Please input a string contains number, char, \
space or other characters:
") num, char, spa, other = 0, 0, 0, 0 for i in string: if 'a' <= i <= 'z' or 'A' <= i <= 'Z': char += 1 elif '0' <= i <= '9': num += 1 elif i == ' ': spa += 1 else: other += 1 print("There are {} numbers, {} chars, {} spaces, {} other characters." .format(num, char, spa, other))

結果
Please input a string contains number, char, space or other characters:
123  hduewi 87,./d
There are 5 numbers, 7 chars, 3 spaces, 3 other characters.

4.3最大公約数計算
キーボードから2つの整数を受け取り,最大公約数と最小公倍数を求める.(ヒント:最大公約数を求めるには転がり相殺法、最小公倍数用量数の積を求めるには最大公約数で割る)
転がり相除算:大きな数で比較小数で除算し、出現した余数(第1余数)で除算し、出現した余数(第2余数)で第1余数を除去し、最後の余数が0になるまで繰り返す.2つの数の最大公約数を求める場合、最後の除数はこの2つの数の最大公約数です.
# 4.3 
a,b = eval(input("Please input two integer (use , to separate):
"
)) if a != b: if a > b: big = a small = b else: big = b small = a while 1: c = big % small if c != 0: big = small small = c continue else: break else: small = a print(" {}".format(small)) print(" {:d}".format(int(a*b/small)))

結果:
Please input two integer (use , to separate):
128,36
       4
       1152


Please input two integer (use , to separate):
24,24
       24
       24

もう一つの古い方法の更相減損術を補充する:『九章算術』では、この方法を紹介した.「可半者半之、不可半者、副置分母、子の数、少減多、更相減損、求其等也.等数約之」ステップ1:任意に2つの正の整数を指定します.偶数かどうかを判断します.もしそうなら、2約簡を使います.そうでない場合は、2番目のステップを実行します.第2歩:大きい数で小さい数を減らして、それから得た差を小さい数と比較して、そして大きい数で小数を減らします.得られた減数と差が等しくなるまでこの操作を続けます.第1のステップで約束されたいくつかの2と第2のステップの中等数の積が求められる最大公約数である.その中で「等数」というのが、最大公約数です.「等数」を求める方法は「更相減損」法である.従って、より相減損法は等値アルゴリズムとも呼ばれる.
4.4
4.1参照
4.5クイズゲーム続き
ユーザが整数(アルファベット、浮動小数点数など)でないと入力すると、プログラムは実行終了を中止します.4.4のプログラムを改編し、ユーザーがエラーを入力したときにヒントを与え、ユーザーに再入力させる.
#4.5
from random import randint
num = randint(0,100) #             num = 3
n = 1
while 1:
    try:
        a = eval(input("Guess a number from 0 to 100: "))
        if isinstance(a,int):

            if a < num:
                print("Too small.")
                n += 1
            elif a > num:
                print("Too large.")
                n += 1
            else:
                print("Congraduations! Guess {:d} time(s)." .format(n))
                break
        else:
            print("Input wrong!")
            continue
    except NameError:
        print("Input wrong!")
    

結果

Guess a number from 0 to 100: 3.6
Input wrong!
Guess a number from 0 to 100: fr
Input wrong!
Guess a number from 0 to 100: 50
Too small.
Guess a number from 0 to 100: 75
Too large.
Guess a number from 0 to 100: 68
Too small.
Guess a number from 0 to 100: 70
Congraduations! Guess 4 time(s).


4.6(未完待機)
# 4.6
from random import randint
trueno = 0 #not change, guess right
trueyes = 0 #change, guess right
falseno = 0 #not change, guess wrong
falseyes = 0 #change, guess wrong
man = eval(input("Choose one door number from 1, 2, 3:"))
car = randint(1,3)
g = []
for i in [1,2,3]:
    if i != car:
        g.append(i)
for i in g:
    if man != i:
        door = i
for i in [1,2,3]:
    if i != door and i != car:        
        goat = i
print("man:{},car:{},door open:{}".format(man,car,door))
choice = input("Do you what to change your choice?
Input yes or no:"
) if choice == 'no': if man == car: trueno += 1 else: falseno += 1 else: for i in [1,2,3]: if i != man and i != door: man = i break else: continue if man == car: trueyes += 1 else: falseyes += 1 print("choice is: {}, guess {}.".format(choice, 'yes' if trueno==1 or trueyes==1 else "no")) print("man:{},car:{},door open:{}".format(man,car,door))

結果
Choose one door number from 1, 2, 3:2
man:2,car:1,door open:3
Do you what to change your choice?
Input yes or no:yes
choice is: yes, guess yes.
man:1,car:1,door open:3


Choose one door number from 1, 2, 3:2
man:2,car:3,door open:1
Do you what to change your choice?
Input yes or no:no
choice is: no, guess no.
man:2,car:3,door open:1