《python言語プログラム設計基礎》嵩天著-第4章プログラム練習問題解答
26510 ワード
練習問題コード
本を読んで独学の中で、自分の宿題を貼って、みんなが交流して指摘することを歓迎して、いっしょに進歩します~
4.1クイズゲーム
プログラムには0〜9の整数が予め設定されており、ユーザはキーボードで推測数を入力し、推測結果を与え、推測総回数を与える.
結果
4.2異なる文字数の統計
ユーザーはキーボードから1行の文字を入力し、プログラムを作成し、英語の文字、数字、スペース、その他の文字の個数を統計します.
結果
4.3最大公約数計算
キーボードから2つの整数を受け取り,最大公約数と最小公倍数を求める.(ヒント:最大公約数を求めるには転がり相殺法、最小公倍数用量数の積を求めるには最大公約数で割る)
転がり相除算:大きな数で比較小数で除算し、出現した余数(第1余数)で除算し、出現した余数(第2余数)で第1余数を除去し、最後の余数が0になるまで繰り返す.2つの数の最大公約数を求める場合、最後の除数はこの2つの数の最大公約数です.
結果:
もう一つの古い方法の更相減損術を補充する:『九章算術』では、この方法を紹介した.「可半者半之、不可半者、副置分母、子の数、少減多、更相減損、求其等也.等数約之」ステップ1:任意に2つの正の整数を指定します.偶数かどうかを判断します.もしそうなら、2約簡を使います.そうでない場合は、2番目のステップを実行します.第2歩:大きい数で小さい数を減らして、それから得た差を小さい数と比較して、そして大きい数で小数を減らします.得られた減数と差が等しくなるまでこの操作を続けます.第1のステップで約束されたいくつかの2と第2のステップの中等数の積が求められる最大公約数である.その中で「等数」というのが、最大公約数です.「等数」を求める方法は「更相減損」法である.従って、より相減損法は等値アルゴリズムとも呼ばれる.
4.4
4.1参照
4.5クイズゲーム続き
ユーザが整数(アルファベット、浮動小数点数など)でないと入力すると、プログラムは実行終了を中止します.4.4のプログラムを改編し、ユーザーがエラーを入力したときにヒントを与え、ユーザーに再入力させる.
結果
4.6(未完待機)
結果
本を読んで独学の中で、自分の宿題を貼って、みんなが交流して指摘することを歓迎して、いっしょに進歩します~
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