自分のコード
|
def validate(hand): |
|
|
|
|
| 2 |
if hand < 0 or hand > 2: |
| 3 |
return False |
| 4 |
else: |
| 5 |
return True |
| 6 | |
| 7 |
def print_hand(hand, name='ゲスト'): |
| 8 |
hands = ['グー', 'チョキ', 'パー'] |
| 9 |
print(name + 'は' + hands[hand] + 'を出しました') |
| 10 |
|
|
|
|
| 12 |
player_name = input('名前を入力してください:') |
| 13 |
print('何を出しますか?(0: グー, 1: チョキ, 2: パー)') |
| 14 |
player_hand = int(input('数字で入力してください:')) |
| 15 |
|
|
|
|
| 16 |
if validate(player_hand): |
| 17 |
print('正しい数値を入力してください') |
| 18 |
|
| 19 |
if player_name == '': |
| 20 |
print_hand(player_hand) |
|
|
|
|
|
|
|
|
|
| 21 |
else: |
| 22 |
|
間違い
16行目に if文があり、その下19行目にもif文がある。
そのうえで16行目からの条件分岐後の処理を書いていない、状態でインデントなしで19行目にif文を打ち込んでいる。
Trueだった場合はの処理は17行目の
であるが、Falseだった場合の処理の記載がない。
|
print('正しい数値を入力してください') |
|
|
if文は
直前の処理
↓
if文
|
---------------------------------------------------------------
| | |
A B C
↓ ↓ ↓
その後の処理A その後の処理B その後の処理C
のように直前の処理から条件を分岐させるものであり、その後の処理の分岐をさせなければならない為、処理を必ず分岐させた数だけ書かなければならない。
もし、処理を書かないままに新たな処理を書いた場合、
直前の処理
↓
if文
|
---------------------------------------------------------------
| | |
A B C
↓ ↓ ↓
その後の処理A その後の処理B
↓ ↓ ↓
新たな処理 新たな処理 新たな処理
のような形になり、A、Bの場合は問題なく進行していくが、Cを選んだ場合は何も書かれていない為、処理が進まずにエラーが起こる。
普通にif文を書いた場合には中々起こらないし、すぐに気づけると思うが、関数などで定義した場合、見落としがちなので注意。