2017-03-03 16 views
0

リストに入る入力を検証しようとしています。入力は整数でなければなりません。整数または1文字を入力すると、どのように動作しますか?しかし、「qw」のようなものを入力すると、プログラムがクラッシュします。入力をより正確に検証するために私は何ができますか?ここに私のコードは次のとおりです。入力の検証python 2.7.13

def getPints(pints): 
    counter = 0 
    while counter < 7: 
     pints[counter] = raw_input("Enter the number of pints donated: ") 
     check = isinstance(pints[counter], int) 
     while check == False: 
      print "Please enter an integer!" 
      pints[counter] = input("Enter the number of pints donated: ") 
     counter = counter + 1 

答えて

0

書かれたようraw_input()は文字列のみ、決して整数を返すので、checkは常に、Falseと評価されます。それで、checkを更新しないので、無限のwhileループに詰まってしまいます。

isinstanceの代わりに、文字列isdigit()を使用してください。

check = pints[counter].isdigit() 

また、checkをループ内で再評価する必要があります。しかし、実際には、checkはまったく必要ありません。

pints[counter] = raw_input("Enter the number of pints donated: ") 
while not pints[counter].isdigit(): 
    print "Please enter an integer!" 
    pints[counter] = raw_input("Enter the number of pints donated: ") 

私はあなたにも、あなたが適切な入力を持っていたら、intにpints[counter]を変換したいと思います。

LBYLメソッド(Look Before You Leap)を使用しています。また、入力をintに変換し、入力が悪い場合には例外をキャッチするだけで、EAFP(許可よりも簡単に尋ねる)メソッドを使うことができます: