bugfix> python > 投稿

私の目標は、プログラムを終了するまで、無限のユーザー入力を求めてユーザータイプの数の階乗を見つけるように求める階乗プログラムをPythonで作成することです。しかし、プログラムを終了するために機能するコードの行とその下の整数の間には、おそらく矛盾があります。

1)私はこれを解決しないように書こうとしました int(input) 私はただ書いた

input('Enter a number. Type exit to stop:> ')

上または下の両方 while True ステートメントが機能しませんでした。

2)私も使いたい lower() プログラムを終了する関数ですが、それを使用すると、ユーザー入力に整数を要求するので再び不一致が発生しますが、通常の入力に切り替えて上記のように入力すると、 while True ステートメント、問題が発生します。

3)また、それを使って数値としてユーザー入力をしたい isdigit() 関数はこのように使用しようとしましたが、うまくいきませんでした:

factorial = 1
user_input = input('Enter a number: ')
while user_input.lower() != 'exit':
    while not user_input.isdigit():
        print('This is not a number. Please try again:> ')
        user_input = int(input('Try again:> '))
    user_input = int(input('Enter a new number: '))
   .
   .
   .

これもうまくいきませんでした

私の実際のコードはこれです:

while True:
factorial = 1
user_input = int(input('Enter a number. Type exit to stop:> '))
if user_input == 'exit':
    print('You are quitting the program')
    break
elif user_input < 0:
    print("Sorry, factorial does not exist for negative numbers")
elif user_input == 0:
    print("The factorial of 0 is 1")
else:
    for i in range(1, user_input + 1):
        factorial = factorial * i
    print("The factorial of", user_input, "is", factorial)

プログラムは次のように機能します。

Enter a number. Type exit to stop:> 4
The factorial of 4 is 24
Enter a number. Type exit to stop:> 5
The factorial of 5 is 120
Enter a number. Type exit to stop:> 6
The factorial of 6 is 720

プログラムを終了するために「exit」と入力すると、次のようなエラーが発生します。

Traceback (most recent call last):
  File "E:/Kodlar/Python/Taslak projeler/taslak177.py", line 5, in <module>
    user_input = int(input('Enter a number. Type exit to stop:> '))
ValueError: invalid literal for int() with base 10: 'exit'

ご覧のように、ユーザー入力でプログラムを終了する代わりに、コードブロックが機能します。どうすれば修正できますか?

誰か助けてもらえますか?もうありがとう!

編集:私はコードを再編成し、それは完全に正常に動作します。あなたのすべての応答をありがとう!

while True:
    user_input = input("Enter a number:> ")
    if user_input == "exit":
        print('You are quitting the program...')
        break
    else:
        try:
            factorial = 1
            user_input = int(user_input)
            if user_input < 0:
                print("Sorry, factorial does not exist for negative numbers")
            elif user_input == 0:
                print("The factorial of 0 is 1")
            else:
                for i in range(1, user_input + 1):
                    factorial = factorial * i
                print(f'The factorial of {user_input} is {factorial}')
        except ValueError:
            print("Please provide a valid number")

回答 3 件
  • 入力が exit 変換する前 int もしそうなら、ループを破ります。

    代わりにこれを試してください:

    while True:
        user_input = input("Enter a number:")
        if user_input == "exit":
            print('You are quitting the program')
            break
        else:
            try:
                user_number = int(user_input)
                if user_number < 0:
                    print("Sorry, factorial does not exist for negative numbers")
                elif user_number == 0:
                    print("The factorial of 0 is 1")
                else:
                    # calc factorial here
            except ValueError:
                print("Please provide a valid number")
    
    
    

  • あなたのプログラムは int 入力、

    user_input = int(input('Enter a new number: '))
    
    

    代わりにこれを試して、文字列の入力を取得してください

    user_input = input('Enter a new number: ')
    
    

    そしてそれを int 後で

    user_input = int(user_input)
    
    

  • どちらの場合も、ユーザーの応答(文字列)をintにキャストしているためです。

       user_input = int(input('Enter a new number: '))
    
    

    以降

    user_input = int(input('Enter a number. Type exit to stop:> '))
    
    

    少し調整してみてください。

    while True:
        factorial = 1
        user_input = input('Enter a number. Type exit to stop:> ')
        if user_input.lower().strip() == 'exit':
            print('You are quitting the program')
            break
        elif user_input.isnumeric() and user_input < 0:
            print("Sorry, factorial does not exist for negative numbers")
        elif user_input.isnumeric() and user_input == 0:
            print("The factorial of 0 is 1")
        elif user_input.isnumeric():
            for i in range(1, user_input + 1):
                factorial = factorial * i
            print("The factorial of", user_input, "is", factorial)
        else:
            print("Please enter an integer or 'exit'")
    
    
    

    別のものをラップすることもできます if だからあなたは複製しないでください isnumeric() テスト

あなたの答え