0

Pythonで対数計算機を作ろうとしています。完成まであと一歩です。コードは次のとおりです。

import math
print("Welcome to logarithm calculator")

while True:
    try:
        inlog = int(input("Enter any value greater than zero to lookup its logarithm to    the base 10\n"))
        outlog = math.log(inlog, 10)
        print(outlog)

        # Here, the program will ask the user to quit or to continue
        print("Want to check another one?")
        response = input("Hit y for yes or n for no\n")

        if response == ("y" or "Y"):
            pass
        elif response == ("n" or "N"):
            break
        else:
            #I don't know what to do here so that the program asks the user to quit or continue if the response is invalid?

    except ValueError:
        print("Invalid Input: Make sure your number is greater than zero and no alphabets. Try Again.")

else ステートメントの後、「y」または「Y」、「n」または「N」として有効な応答になるまで、プログラムでユーザーに何度も応答するように求めます。ここに別の while ループを追加すると、ユーザーが「y」を入力した場合に pass ステートメントでうまく機能します。ただし、ユーザーが「n」と応答してもプログラムが壊れることはありません。これは、外側のループに陥るからです。では、これをどう整理するか。

4

6 に答える 6

4

そのテストを別の関数に移動できます。

def read_more():
    while True:
        print("Want to check another one?")
        response = input("Hit y for yes or n for no\n")

        if response == ("y" or "Y"):
            return True
        elif response == ("n" or "N"):
            return False
        else:
            continue

次に、関数で、このメソッドの戻り値の型をテストします。

while True:
    try:
        inlog = int(input("Enter any value greater than zero to lookup its logarithm to    the base 10\n"))
        outlog = math.log(inlog, 10)
        print(outlog)

        if read_more():
            continue
        else:
            break

ユーザーが間違った入力を続けると、無限ループに入る可能性があることに注意してください。彼の最大試行回数を制限できます。

于 2013-02-10T09:49:02.060 に答える
1

次のようなことができます。

stop=False
while True:
    try:
        inlog = int(input("Enter any value greater than zero to lookup its logarithm to    the base 10\n"))
        outlog = math.log(inlog, 10)
        print(outlog)

        # Here, the program will ask the user to quit or to continue
        print("Want to check another one?")

        while True:
            response = input("Hit y for yes or n for no\n")
            if response == ("y" or "Y"):
                stop = False
                break
            elif response == ("n" or "N"):
                stop = True
                break
            else:
                continue
        if stop:
            break
except ValueError:
        print("Invalid Input: Make sure your number
于 2013-02-10T09:49:50.180 に答える
0
stop=False
while not stop:
    try:
        inlog = int(input("Enter any value greater than zero to lookup its logarithm to the base 10\n"))
        outlog = math.log(inlog, 10)
        print(outlog)

        # Here, the program will ask the user to quit or to continue
        print("Want to check another one?")

        while True:
            response = raw_input("Hit y for yes or n for no\n")
            if response == ("y" or "Y"):
                break
            elif response == ("n" or "N"):
                stop = True
                break
    except ValueError:
        print("Invalid Input: Make sure your number")
于 2013-02-10T11:29:41.770 に答える
0

これを試して:

import math
class quitit(Exception):
    pass
print("Welcome to logarithm calculator")

while True:
    try:
        inlog = int(input("Enter any value greater than zero to lookup its logarithm to    the base 10\n"))
        outlog = math.log(inlog, 10)
        print(outlog)

        # Here, the program will ask the user to quit or to continue
        print("Want to check another one?")
        while True: 
            response = input("Hit y for yes or n for no\n")
            if response == ("y" or "Y"):
                break
            elif response == ("n" or "N"):
                raise quitit
except quitit:
        print "Terminated!"        
except ValueError:
        print("Invalid Input: Make sure your number is greater than zero and no alphabets. Try Again.")
于 2013-02-10T09:51:40.927 に答える
0

ユーザーがゼロ以下の数値を入力すると、考慮していない例外が発生します。

ループから抜け出す限り、すでに抜け出せないほど入れ子になっているわけではありません。より深いネストがある場合は、次のテンプレートを使用してネストされたループから抜け出すことをお勧めします。

def loopbreak():
  while True:
    while True:
      print('Breaking out of function')
      return
  print('This statement will not print, the function has already returned')
于 2013-02-10T10:03:04.407 に答える
0

「false」の初期値を使用して、値の外側にブール値パラメーターを定義できます。外側のループの各実行の開始時に、このブール値をチェックできます。true の場合は、外側のループも中断します。その後、外側のループを内側のループの中で終了させたい場合は、内側のループを壊す前に値を true にしてください。このようにして、外側のループも壊れます。

于 2013-02-10T09:41:42.460 に答える