1

ユーザーからの入力を確認するために、以下のコードを変更しようとしています。入力が文字列の場合、エラーを生成したい場合は、choiceTest() 関数を参照してください。しかし、これは機能せず、次の例外が発生します。グラハムを助けてもらえますか

Choice your option:k
Traceback (most recent call last):
  File "C:\Users\Graham\bkup-workspaces\workspace\python-1\calculator.py", line 54, in <module>
    choice = menu()
  File "C:\Users\Graham\bkup-workspaces\workspace\python-1\calculator.py", line 18, in menu
    return input ("Choice your option:")    
  File "C:\Users\Graham\Desktop\letsussee\eclipse-java-helios-win32\eclipse\plugins\org.python.pydev_2.5.0.2012040618\PySrc\pydev_sitecustomize\sitecustomize.py", line 210, in input
    return eval(raw_input(prompt))
  File "<string>", line 1, in <module>
NameError: name 'k' is not defined

コード:

# calculator program

# NO CODE IS REALLY RUN HERE, IT IS ONLY TELLING US WHAT WE WILL DO LATER
# Here we will define our functions
# this prints the main menu, and prompts for a choice
def menu():
    #print what options you have

        print "Welcome to calculator.py"
        print "your options are:"
        print " "
        print "1) Addition"
        print "2) Subtraction"
        print "3) Multiplication"
        print "4) Division"
        print "5) Quit calculator.py"
        print " "
        return input ("Choice your option:")    
# this adds two numbers given

def add(a,b):
    print a, "+", b, "=", a + b

# this subtracts two numbers given
def sub(a,b):
    print b, "-", a, "=", b - a

# this multiplies two numbers given
def mul(a,b):
    print a, "*", b, "=", a * b

# this divides two numbers given
def div(a,b):
    print a, "/", b, "=", a / b

# decide if the choice is valid or not 
def choiceTest():


    isinstanceValue = isinstance(choice,int)
    instancevalueout = str(isinstanceValue)
    print "value is" + instancevalueout
    if not instancevalueout is "True":
       print " NOT AN INTEGER " + instancevalueout
       raise SystemExit

# NOW THE PROGRAM REALLY STARTS, AS CODE IS RUN
loop = 1
choice = 0
isinstanceValue = True
instancevalueout = ""

while loop == 1:
    choice = menu()
    choiceTest()
    if choice == 1:
        add(input("Add this: "),input("to this: "))
    elif choice == 2:
        sub(input("Subtract this: "),input("from this: "))
    elif choice == 3:
        mul(input("Multiply this: "),input("by this: "))
    elif choice == 4:
        div(input("Divide this: "),input("by this: "))
    elif choice == 5:
        loop = 0


print "Thankyou for using calculator.py!"

# NOW THE PROGRAM REALLY FINISHES
4

1 に答える 1

2

あなたの問題は、input()(Python 2.xで)入力をPythonコードとして解析する which を使用していることです。つまり、ユーザーが引用符で囲まれた文字列を入力した場合にのみ、意図したとおりに機能します。

おそらくraw_input()、(3.x のように) 文字列を与える which が必要でありinput()、任意のコードの実行が許可されないため、より安全です。これを数字に変換しようとするのはあなた次第であり、それが失敗した場合は例外をキャッチして、ユーザーが数字を入力していないことを通知することに注意してください。

型チェックはクラスを恣意的に制限するため、Python では眉をひそめられます。これは、Python がダック型付けされているため、通常は行わないことです。やりたいことを実行しようとし、失敗した場合は例外をキャッチして、適切に処理することをお勧めします。 . これは、許可ではなく許しを求めることとして知られています。

于 2012-06-22T19:33:34.410 に答える