2016-01-22 139 views
0

我知道这应该是非常简单的,但在这一点上,我在智慧的结尾试图弄清楚这一点。我已经在python中编写了一个计算器,但由于某种原因,结尾if-else语句只会触发else段。Python:如果条件似乎得到满足,但没有触发

import sys 
import re 

#setting values 
x = 0 
n = '+' 
y = 0 
#valid input flag 
valid = True 
#continue operations flag 
run = True 
again = "k" 

#addition function 
def add(x, y): 
    return x + y 

#subtraction function 
def subtract(x, y): 
    return x - y 

#multiplication function 
def multiply(x, y): 
    return x * y 

#division function 
def divide(x, y): 
    return x/y 

#continuation loop 
while run == True: 
    #Prompt for and accept input 
    equation = raw_input("Please insert a function in the form of 'operand' 'operator' 'operand' (x + y): ") 
    equation.strip() 
    #Divide input into 3 parts by spaces 
    pieces = re.split('\s+', equation) 

    #set part 1 = x as float 
    x = pieces[0] 
    try: 
     x = float(x) 
    except: 
     print "x must be a number" 
     valid = False 

    #set part 2 = operator 
    if valid == True: 
     try: 
      n = pieces[1] 
     except: 
      print "Please use valid formating (x [] y)." 
      valid = False 

    #set part 3 = y as float 
    if valid == True: 
     y = pieces[2] 
     try: 
      y = float(y) 
     except: 
      print "y must be a number" 
      valid = False 

    #If input is valid, do requested calculations 
    while valid == True: 
     if n == '+' : 
      print equation + " =", add(x,y) 

     elif n == '-' : 
      print equation, " =", subtract(x,y) 

     elif n == '*' : 
      print equation, "*", y, " =", multiply(x,y) 

     elif n == '/' : 
      if y == 0: 
       print "You cannot divide by zero." 

      else: 
       print equation, " =", divide(x,y) 

     else: 
      print "Please use an appropriate operator (+ - * /)." 

#play again 
    again = raw_input("Play again? ") 
    print again 

    if again == ("yes", "y", "YES", "Yes","yes"): 
     run = True 
     print "yes'd" 

    else: 
     print "no'd" 
     run = False 

当我运行这段代码,我得到两个不同的问题: 如果我输入一个有效的输入(即:2 + 2),那么我的输出是

“2 + 2 = 4.0”

“2 + 2 = 4.0”

“2 + 2 = 4.0”

重复下去。

如果我输入一个无效的输入,我得到“再次播放?”提示,但不管输入什么,else语句都会触发。 (例如,如果我在“再次播放?”中输入“是”,则会打印: “是”(< - 来自“再次打印”行) “没有”(< - 这是来自“其他:打印‘no'd’)

我不知道如何解决这些问题之一,在这一点上,所以任何帮助,将不胜感激

编辑:谢谢大家。 ,我希望我能查马克大家帮助我理解关于我做错了什么不同的事情。

回答

1

while valid == True:,你永远不会改变的价值,所以它总是True和循环是无限的。我不明白为什么它甚至是一个循环 - 将其更改为if,就像它上面的块一样,它将按预期行事。

另外,在if again == ("yes", "y", "YES", "Yes","yes"):中,将==更改为in并且其行为将与预期相同。

1

也许你应该将这段代码:

while valid == True: 
    if n == '+' : 
     print equation + " =", add(x,y) 

    elif n == '-' : 
     print equation, " =", subtract(x,y) 

    elif n == '*' : 
     print equation, "*", y, " =", multiply(x,y) 

    elif n == '/' : 
     if y == 0: 
      print "You cannot divide by zero." 

     else: 
      print equation, " =", divide(x,y) 

    else: 
     print "Please use an appropriate operator (+ - * /)." 

有了这个...

if valid: 

或者......

while valid == True: 
    # Insert your previous code here. 
    break 

你也可以只简单地设置有效的假的也在你的循环底部。这将工作。

我认为在这种情况下有效性是不变的。你也写了while while valid,这意味着它将继续遍历循环,直到有效等于false。看起来,在while循环中的这段代码中,有效值不会切换为false。

1

while valid == True:也许应该是if valid == True

,并为您的第二个问题:

if again == ("yes", "y", "YES", "Yes","yes"):也许应该是:

again = again.lower(); 
if again == "yes" or again == "y": 
1

你的答案是循环的,因为

while valid == True: 

更换循环与if声明


你得到“no'd”因为

if again == ("yes", "y", "YES", "Yes", "yes"): 

这里给您等同字符串元组,而不是检查字符串是否包含一个元组内。试试这个:

if again in ("yes", "y", "YES", "Yes""): 
相关问题