0

私の目的は、学生からの入力を受けて、 3桁の数字をタイプしたことを確認することです。 3未満でも3以上でもなく、文字列であってはいけません。上記のすべては、この何か間違っている場合、その真なるPython 3.xいくつかの必要条件が真であるかどうかを制御するプログラム

def studentID(): 
     try: 
      number=int(input("sutedent IDS:")) 
      try: 
       assert len(number)==3 

      except AssertionError: 
       print("Must be 3 digit number.") 
       studentID() 

     except ValueError: 
      print("Please enter an integer.") 
      studentID() 

     except TypeError: 
      print("What is wrong with you?") 
      studentID() 

答えて

0

int sがlenを持っていないまで、プログラムは再び尋ねる必要があります。長さを確認するには、文字列に戻す必要があります。

def studentid(): 
    try: 
     num = int(input('student ID:')) 
     if len(str(num)) != 3: 
      print('Please enter a 3-digit number') 
      return studentid() 
     return num 
    except ValueError: 
     print('Please enter a 3-digit number') 
     return studentid() 

おそらくnumを呼び出し元に返すこともできます。入力はintにキャストされ、文字列に戻ります。これは、Python(3.6+)の最近のバージョンでは、リテラルにアンダースコアを設定できるため、int('1_2')は2桁の数値になる有効な3文字の入力となるからです。

+0

カントーだろうどのようにそれは役に立たないのですか? –

+0

'TypeError'は' nen'が 'int'で' len(n) 'を実行しようとしていたために表示されていました。 'int'は' len'をサポートしていないので、型エラーが発生します。それは上では起こらないはずです。どうにかして 'TypeError'を発生させた場合は、問題を特定できるようにプログラムを停止させるべきです。 –

0

パトリックのコメントに追加するには、範囲を好む(len(3))、それは明確で、より効率的です。 私はなぜあなたは型エラーを取り除くでした

def studentID(): 
     number=int(input("sutedent IDS:")) 
     if range(len(number)) == 3: 
      return studentID() 
     elif number is not int or range(len(number)) > 3 : 
      print('please enter a valid number') 
      return studentID() 
     else: 
      raise ValueError 
      return studentID() 
+0

あなたが書いたことを理解できませんでした。また、それは動作していません –

関連する問題