プログラミング入門II 演習課題 2024.07.03

Back to text page


  1. 例外処理基本

    教科書の List 12-2 の処理を乱数で試してみましょう.変数 a と b として -2 から 2 の範囲の整数を乱数により発生させて,ゼロで割るエラーを確認してみましょう.

    Integer a: -1
    Integer b: 0
    a * b = 0
    Division by zero
    Good job!
    
    Integer a: 1
    Integer b: -2
    a * b = -2
    a / b = -0.5
    Normal termination!
    Good job!
    

    解答例

  2. エラー回避

    以下のプログラムは実行するとエラーとなります.それを例外を用いて,不足する変数 b の値を適当に与えてとりあえず実行完了となるプログラムに変えてみましょう.

    def pro(a, b):
        print(f'a * b = {a * b}')
    
    a = 2
    
    pro(a, b)
    

    Traceback (most recent call last):
      File "error.py", line 6, in 
        pro(a, b)
    NameError: name 'b' is not defined
    

    解答例

  3. 前問の改造

    さきほどは変数 b に適当に値を入れて実行時エラーを回避しましたが,今回はこれまでこの授業では使用しないと言っていた input() を使用して,キーボードから値を入れて処理を完了するプログラムにしてみましょう.

    b = 5
    a * b = 10
    

    解答例

  4. リストに関するエラー
  5. 提出された課題で時々見られるのがリストのインデックスに関するものです.例えば,以下のソースは実行するとエラーになります.エラーの種類を確認しましょう.

    from random import randint as randi
    
    lst = [randi(10, 99) for _ in range(10)]
    
    print(lst[len(lst)])
    

  6. 前問のエラー回避
  7. 前問のエラーを try 文を用いてエラーによる異常終了を回避して,とりあえず正常終了するようにしましょう.

    Error concerning index occurred.
    Numobers:  47 74 85 38 78 62 32 96 63 42
    Max index of above list: 9
    Index you designated: 10
    Good job!
    

    解答例

  8. その他のエラー
  9. みなさんからの提出プログラムには他にも,SyntaxError や TypeError などがちょくちょくあります.以下のソースは TypeError の一例で 'list indices must be integers or slices, not list' と表示される例です.乱数をどれか一つランダムに表示させたいだけなのですが,リストの要素で指定しようとしてエラーになります.意味が分かりますでしょうか.

    from random import randint as randi
    
    lst1 = [i for i in range(10)]
    print(*lst1)
    
    lst2 = [randi(10, 99) for _ in range(10)]
    print(*lst2)
    
    print(lst2[lst1])
    

    簡単だと思いますので,エラーが出ないように変更してみてください.

  10. その他のエラー その2
  11. 他にも Python の初心者がよく出くわすエラーに TypeError: 'list' object is not callable というのもあります.以下のソースのエラーの原因はわかるでしょうか?

    from random import randint as randi
    
    list = [randi(10, 99) for _ in range(10)]
    
    print(list(map(lambda n: 2 * n, list)))
    

    こちらも簡単だと思いますので,エラーが出ないように変更してみてください.


Back to text page