プログラミング入門I
2024.12.02
for 文

Back to index page



  1. 本日の作業内容

  2. 前回の宿題について

    今回はエラーになるものがありませんでした!すごくうれしいですね.ただ,依然として問題のあるものはいろいろと出てきていますので,注意して提出しましょう.

    前回の課題提出: b2402

    出力時番号間違い: b2416

    以下は例によって問題のあるプログラムの例です.参考にしてください.

    for x in range(3,9):
        Num1=random.randint(10**(x-1),10**x-1)
        print(f'{x}:{Num1}')
    

    変数名は小文字で始めるように何度も何度も何度も何度も何度も...

    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回出力しています.ちょっと落ち着いて.

  3. 前回の復習

    反復処理の2回目として for 文を扱いました.その前に学習した while 文と異なり,in メソッドと range 関数により変数の値を指定して繰り返しを行います.その際には,その変数をスイートの中で有効に使用することで,さまざまな処理を行うことができますので,今後もしっかりと学習していきましょう.

  4. for 文 その2

    今回も引き続き for 文について学習します.宿題のまとめのところでも簡単に説明しましたが,for 文は変数 i をどう使うかがポイントです.今回も例題を通してしっかり理解を深めて行きましょう.

  5. 演習

    今回の演習問題です.

  6. 本日のまとめ

  7. 宿題

    宿題が公開されるのは明日火曜日10:00の予定で,締切りは来週の月曜日12月9日の10:00です.レポート提出システムを使用します.

  8. 次回の予習範囲

    次回も引き続き教科書のp.102-114の範囲を学習しますので,予習をしてきてください.多重のループについて特に扱います.

    また,次回は2回目の確認テストを行いますので,しっかり準備してきてください.範囲は while 文と for 文の多重ではないものです.


目次ページに戻る