有人可以解释这个简单的Python计算器代码吗?

问题描述:

这是一个非常简单的计算器程序的Python代码。有人可以解释这个简单的Python计算器代码吗?

loop = 1 # 1 means loop, 0 means don't loop. 

choice = 0 # holds the user's choice in the menu. 

while loop == 1: 
    print ("Welcome to the python calculator.") 

    print ("Your options are:") 
    print ("") 
    print ("1) Addition") 
    print ("2) Subtraction") 
    print ("3) Multiplication") 
    print ("4) Division") 
    print ("5) Quit calculator") 
    print ("") 

    choice = input("Choose your option: ") 
    if choice == 1: 
     add1 = input ("Add this: ") 
     add2 = input ("to this: ") 
     print (add1, "+", add2, "=", add1+add2) 
    elif choice == 2: 
     sub1 = input ("Subtract this: ") 
     sub2 = input ("from this: ") 
     print (sub1, "-", sub2, "=", sub1-sub2) 
    elif choice == 3: 
     mul1 = input ("Multiply this: ") 
     mul2 = input ("by this: ") 
     print (mul1, "*", mul2, "=", mul1*mul2) 
    elif choice == 4: 
     div1 = input ("Divide this: ") 
     div2 = input ("by this: ") 
     print (div1, "/", div2, "=", div1/div2) 
    elif choice == 5: 
     loop = 0 

print ("Thank you for using the python calculator, goodbye.") 

的问题是,当它得到的以“选择你的选择”线和用户输入的不是去IF-elif的块的相关部分的数,程序而是返回到用“欢迎使用python计算器”消息开始循环。

我试着打印出选择的变量用户输入他们的选择并正确打印出来,让任何人都可以解释为什么它不然后使用在IF-elif的块选择值后立即?

+5

'str' VS:

if choice == 1: 

...应该对一个字符串进行评估'int'问题 – vaultah 2014-09-05 15:47:09

+0

@vaultah哦! Python中的input()函数是否以字符串形式读取值?我刚刚开始使用Python,所以没有意识到这一点。那么最好的解决方案然后将用户选择投入到一个int或是有一个函数类似于input()读入一个int而不是一个字符串? – 2014-09-05 15:50:30

+1

你可以随时转换它:'int(input('Whatever'))' – vaultah 2014-09-05 15:54:58

正如@vaultah提到:

if choice == "1": 

对于使用Python 2.x的人,be careful of raw_input() vs. input()

+1

啊,我也可以比较两个字符串,就像你在这里做的那样。 相反,我选择将它们转换为@vaultah建议的整数。 非常感谢,新来的Python。 – 2014-09-05 16:03:33

更换

choice = input("Choose your option: ") 

有:

choice = int(raw_input("choose your option: ")) 

这将返回int,而不是一个str,应该解决这个问题。

+0

经过测试并为我工作 – 2014-09-05 15:59:16

+3

在Python 3上进行测试,因为问题已被标记。 – davidism 2014-09-05 15:59:40

+0

@davidism我的错误,没有看到标签,因为我从我的手机回答。我会保留答案,因为其他人可能会觉得它有用。 – 2014-09-05 17:14:00