プログラミング入門I
2024.12.02
for 文
変数名は小文字で始めるように何度も何度も何度も何度も何度も...
num = 100 for i in range(3, 9): num *= 10 num2 = random.randint(num // 10, num - 1) print(f"{i}:{num2:10d}") |
ちょっと見にはわからないのですが,コロン : が2バイト文字,いわゆる全角の:になっています.環境によっては出力結果が以下のようになることがあります.
3 □F 178 4 □F 6801 5 □F 23771 6 □F 988502 7 □F 3516328 8 □F 23139789 |
i=2 u=3 e=99 for u in range(3,9): e+=9*(10**i) n1=random.randint(1*10**i,e) print(f'{u}:',end='') print(f'{n1:>9}') i+=1 else: print() |
今回よく見られたのが上のように変数を無駄に多く使っているものです.i や u とか e など意味のない名前の変数を使って値の受け渡しをすると,人が見たらものすごくわかりづらいものになりますので,注意してください.
a = 100 b = 999 for i in range(3, 9): num = random.randint(a, b) a *= 10 b = b * 10 + 9 print(f'{i}: {num:>8}') |
上のものも変数が無駄に多いと判断しました.変数名も良くないのですが,それとは別に b の値は a から作れますので,必要ないです.
for i in range (3,9): num=random.randint(10**(i-1),10**i-1) print(f'\n{i}: {num:>8}',end = ' ') else: print() |
print の中の改行は要らないですよね.末尾に改行無しを指定するので矛盾しています.
for _ in range(3,9): num1 = 10**(_ - 1) num2 = 10**_ -1 num3 = random.randint(num1,num2) print(f'{_}:{str(num3).rjust(9)}') |
for 文において下線文字 _ で変数名を省略するのは,スイートの中で特に使用する必要が無いときです.使うのであれば,変数名をきちんと置くのが普通です.
num1=sorted([3,8]) for num1 in range (3,9): num2=random.randint(1*(10**(num1-1)),10*(10**(num1-1))-1) print(f'{num1}: {num2:8}') else: print() |
意味のない num1 への代入があります.直後の for 文で num1 の値は初期化しているので,無駄な行になっています.
for n in range(4,10): num = random.randint(10000000,99999999) num2 = 0.1 ** ( 9 - n) num3 = num * num2 num4 = n-1 print(f'{num4}:{num3:8.0f}') else: print() |
やり方は自由ですが,無理に上のようなややこしいことをしなくてもいいはずです.Simple is best なので,簡単に行きましょう.
for i in range(3, 9): num = random.randint(10**(i - 1), 10 ** 8) num1 = num % (10 ** i) print(f'{i}: {num1:>8}') i = i + 1 |
発生させる乱数の上限を 100000000 に固定して,後は剰余を用いて下の桁の数字だけを取り出すという方法ですが,下に示すように例えば一番上の3桁の乱数のところでは,下3桁が 026 だったようで,26になっています.明らかに処理がおかしいですね.
3: 26 4: 6356 5: 93191 6: 4665 7: 1731110 8: 45789460 |
for count in range (3,9): num=random.randint(10**(count-1),10**count) print(count,':',num) |
今回は10人がこのように print 文の中で数字表示の桁数指定をしていませんでした.なので,表示は当然下のように左揃えで出力例と違うものになっています.このようにときどき桁数を指定して出力する問題を出しますので,ちゃんと理解しておいてください.
3 : 573 4 : 4489 5 : 55516 6 : 629695 7 : 1275479 8 : 10578820 |
number = random.randint(100, 999) for i in range(3, 9): print(f"{i}: {number}") number = number * 10 + random.randint(0, 9) |
とりあえず3桁の乱数を用意しておいて,末尾に1桁の数字をつけていくという方針ですが,当然結果は下のようになって,変ですよね.
3: 895 4: 8957 5: 89571 6: 895716 7: 8957168 8: 89571688 |
num=random.randint(min,max) for i in range(3,9): min*=10 max*=10 print(f'{i}:{num}') |
for 文の外で乱数を発生させているので,反復処理を行っても乱数の値は下のように変わりませんよね.どう考えてもおかしいことは自分でわかるはずなので,そこは修正してから出してください.
3:804 4:804 5:804 6:804 7:804 8:804 |
import random print('Student number: s246058') print('') print('Student number: s246058') print('') for x in range(3,9): num1=random.randint(10**(x-1),10**x-1) print(f'{x:2}:{num1:>9}') print('\n------------------------\n') |
ちゃんと解答用紙を改ざんしないようにしましたアピールでしょうか,学生番号を2回出力しています.ちょっと落ち着いて.
反復処理の2回目として for 文を扱いました.その前に学習した while 文と異なり,in メソッドと range 関数により変数の値を指定して繰り返しを行います.その際には,その変数をスイートの中で有効に使用することで,さまざまな処理を行うことができますので,今後もしっかりと学習していきましょう.
今回も引き続き for 文について学習します.宿題のまとめのところでも簡単に説明しましたが,for 文は変数 i をどう使うかがポイントです.今回も例題を通してしっかり理解を深めて行きましょう.
今回の演習問題です.
宿題が公開されるのは明日火曜日10:00の予定で,締切りは来週の月曜日12月9日の10:00です.レポート提出システムを使用します.
次回も引き続き教科書のp.102-114の範囲を学習しますので,予習をしてきてください.多重のループについて特に扱います.
また,次回は2回目の確認テストを行いますので,しっかり準備してきてください.範囲は while 文と for 文の多重ではないものです.