2017-10-02 18 views
1

私はPythonを学んでいて、プロジェクトに固執しています。このプロジェクトの主な部分は、問題ではないcollat​​zシーケンスをコード化することでした。次の部分は作るために、試してみると以外を使用してユーザー入力を検証することであることを確認だけ整数値がで与えられる これまでのところ、私は、次のコードを持っている:。Python:条件が満たされるまでtry/except文を繰り返してください。

def collatz(number): 
    if number % 2 == 0: 
     return number // 2 
    elif number % 2 == 1: 
     return (3*number) + 1 


print('Please enter a number:') 
number = '' 
try: 
    number = int(input()) 
except ValueError: 
    print('Incorrect type of data entered.\nPlease enter an integer!') 
    while number is not int: 
     try: 
      number = int(input()) 
     except ValueError: 
      print('Incorrect type of data entered.\nPlease enter an integer!') 

output = number 

while output != 1: 
    output = collatz(output) 
    print(output) 

私の問題は、私はあるに私はユーザーから整数を取得するまでtry/except文を繰り返す方法がわかりません。今のところ、整数の代わりに文字列を入力すると、プログラムはループに入り、その後整数を入力することは役に立ちません。私はその話題についてかなりのスレッドを読んでいましたが、上記の問題については明らかにしていませんでした。

どこが間違っているのか本当に分かりますか?

+0

指定された数値が整数の場合は、3回だけチェックしても問題ありません。 'isinstance'関数で型をチェックすることができます – user1767754

+0

'数値はintではありません 'は真実になることはありません。 'type(number)is int'は動作しませんが、not isinstance(number、int)'を使う方が良いでしょう。さらに良いことに、 'trueの間は'を使い、 '例外が発生しないときは'中断する 'だけです。 –

+0

あなたはもちろんそうです。それは私の部分で非常にばかげたミスだった、私はタイプ()に逃した。 私はチェックアウトされますinstance(number、int) - 私は機能を認識していません。しかし、ヒントのために多くのおかげで!非常に高く評価。 – sar91

答えて

0

を使用できます。xが入力されているところ

valid=False 
while not valid: 
    try: 
     number=int(input()) 
     valid=True 
    except ValueError: 
     print('Incorrect type of data entered.\nPlease enter an integer!') 
+0

'while True'、' break'です。 –

0

ただ、isinstance(x, int)を使用しています。

xがintの場合はTrueを返します。あなたが別の方法を探していた場合に備えて、もう一つの解決策!

+0

コメントのおかげで、私はisinstance関数をチェックアウトします - 私は今までそれを認識していませんでした。先端ありがとう! – sar91

関連する問題