自分のコード

 

 

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

print_hand(player_hand, player_name)

 

 

 

間違い
16行目に if文があり、その下19行目にもif文がある。
そのうえで16行目からの条件分岐後の処理を書いていない、状態でインデントなしで19行目にif文を打ち込んでいる。
Trueだった場合はの処理は17行目の
 

print('正しい数値を入力してください')

であるが、Falseだった場合の処理の記載がない。
 

 

 
if文は
                                                         
 
                                   直前の処理
                             ↓
                              if文
                               |
     ---------------------------------------------------------------     
     |                 |                        |
    A                                    B                                         C
  ↓                                   ↓                    ↓
  その後の処理A          その後の処理B         その後の処理C
 
のように直前の処理から条件を分岐させるものであり、その後の処理の分岐をさせなければならない為、処理を必ず分岐させた数だけ書かなければならない。
もし、処理を書かないままに新たな処理を書いた場合、
 
 
                                      直前の処理
                                ↓
                                 if文
                                  |
        ---------------------------------------------------------------     
        |                 |                        |
       A                                    B                                         C
     ↓                                   ↓                    ↓
 その後の処理A          その後の処理B                
      ↓            ↓                   
  新たな処理         新たな処理            新たな処理
 
のような形になり、A、Bの場合は問題なく進行していくが、Cを選んだ場合は何も書かれていない為、処理が進まずにエラーが起こる。
 
普通にif文を書いた場合には中々起こらないし、すぐに気づけると思うが、関数などで定義した場合、見落としがちなので注意。