『世界標準MIT教科書 Python言語によるプログラミングイントロダクション 第3版』の指練習を解く
『世界標準MIT教科書 Python言語によるプログラミングイントロダクション 第3版』の指練習を解く
指練習の回答、書籍には載ってなかったので。。。自分の回答を示します。
問題自体は示しません。それをガンガン示すと著作権的に宜しくない気がするので。
コードは、pylint, flake8, pycodestyle で、おかしい書き方になっていないことは確認済(一部、UPPER_CASE naming styleとかは無視)。
p7
自分の回答
AスタートでBへのドライブ。 1、車に乗り、エンジンをかける。 2、道路に出る。このとき、Bに近づく向きの道を選ぶ。 3、交差点まで進む。 4、交差点で、Bに近づく向きの道(右折、左折、直進)を選んで、次の項交差点まで進む。 5、Bにつくまで、3、4を繰り返す。
p20
自分の回答
# x, y, z = 100, 5, 23 # 正の整数の条件あり # 23 x, y, z = 100, 50, 2300 # 正の整数の条件あり # 50 other_ans = x max_odd = 0 if x % 2: max_odd = x if y % 2: max_odd = max(max_odd, y) if z % 2: max_odd = max(max_odd, z) if not max_odd: max_odd = min(x, y, z) print(max_odd)
コメント
- min,maxとかをif文で書いていたりしたのを修正。
- printが、1か所になるように修正。
p26
自分の回答
# mm/dd/yyyy input # You were born in the year yyyy. yyyy_ = input('your birthday ? (mm/dd/yyyy):') yyyy = yyyy_.split('/')[2] print('You were born in the year', str(yyyy) + '.')
p29
自分の回答
num_x = int(input('How many times should I print the letter X? ')) to_print = '' cnt00 = 0 while cnt00 < num_x: to_print += 'X' cnt00 += 1 print(to_print)
p30
自分の回答
data10 = input('Input 10 positive integers:').split() out_desu = 'no odd interger.' val_odd_max = 0 for val in data10: print(val) int_val = int(val) if int_val % 2 and int_val > val_odd_max: val_odd_max = int_val if val_odd_max: out_desu = val_odd_max # print-sentence is only one. print(out_desu)
p33
自分の回答
bug-fix後
MAX_VALUE1 = 1000 add_value = 0 # upper_limit_a = 1000000 # bug-fix for a in range(3, MAX_VALUE1, 1): upper_limit_a = 1000000 # bug-fix not_sosu = 0 next_a = a for va1 in range(2, next_a - 1, 1): if va1 >= upper_limit_a: # bug-fix break print('va1', a, va1, next_a) if a % va1: upper_limit_a = a//va1 print('upper_limit_a', upper_limit_a) else: not_sosu = 1 break if not_sosu == 0: print(a) add_value += a print("add", add_value) # add 76125
bug-fix前
MAX_VALUE1 = 1000 add_value = 0 upper_limit_a = 1000000 for a in range(3, MAX_VALUE1, 1): not_sosu = 0 next_a = a for va1 in range(2, next_a - 1, 1): if va1 > upper_limit_a: break print('va1', a, va1, next_a) if a % va1: upper_limit_a = a//va1 print('upper_limit_a', upper_limit_a) else: not_sosu = 1 break if not_sosu == 0: print(a) add_value += a print("add", add_value) # add 76125
コメント
- シンプルに難しいです。ちょっと、頭が混乱します。
- エクセルで、一部確認したので、正しいはず。
- もっと良い回答があったら、コメント等で教えて下さい。
p40_1
自分の回答
x = int(input('Enter an integer greater than 2: ')) smallest_divisor = None for guess in range(2, x): if x % guess == 0: smallest_divisor = guess break if smallest_divisor is not None: # print('Smallest divisor of', x, 'is ',smallest_divisor) print('Largest divisor of', x, 'is ', x // smallest_divisor) # modified else: print(x, 'is a prime number')
p40_2
自分の回答
x = int(input('Input an integer :')) root_val = 0 pwr_val = 0 i_center = x//2 # shikkari-tiisaku for _ in range(x): if i_center * i_center > x: i_center = i_center // 2 else: break for y in range(i_center, x): if y * y == x: root_val = y break if x < y * y: break if root_val: print('root pow :', y, 2) elif x == 1: print('root pow :', '1 2, 1 3, 1 4,1 5') elif x == 0: print('root pow :', '0 2, 0 3, 0 4,0 5') else: print('No solution') # ex. # Input an integer :1173155192332004097316 # root pow : 34251353146 2
コメント
- 設問の意味が、いまひとつ理解できず。
- 処理時間への工夫が弱すぎる。
コメント
なんなりコメント下さい。