【问题标题】:Python: If condition appears to be met but isn't triggeringPython:如果条件似乎满足但未触发
【发布时间】:2016-01-22 22:22:26
【问题描述】:

我知道这看起来应该很简单,但在这一点上,我无计可施,试图弄清楚这一点。我在 python 中编写了一个计算器,但由于某种原因,结束 if-else 语句只触发了 else 段。

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 语句都会触发。 (例如,如果我在“再次播放?”中输入“是”,它将打印: “是”(

目前我不知道如何解决这两个问题,因此非常感谢任何帮助。

编辑:谢谢大家,我希望我能对你们所有人进行检查,以帮助我理解我做错的不同方面。

【问题讨论】:

    标签: python if-statement infinite-loop


    【解决方案1】:

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

    另外,在if again == ("yes", "y", "YES", "Yes","yes"): 中,将== 更改为in,它将按预期运行。

    【讨论】:

      【解决方案2】:

      也许你应该替换这段代码:

      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
      

      您也可以在循环底部简单地将 valid 设置为 false。那会起作用的。

      我认为在这种情况下 valid 始终是正确的。您还写了 while valid 为 true,这意味着它将继续迭代循环,直到 valid 等于 false。看来,在 while 循环的这段代码中,valid 没有切换为 false。

      【讨论】:

        【解决方案3】:

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

        对于你的第二个问题:

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

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

        【讨论】:

          【解决方案4】:

          您的答案正在循环,因为

          while valid == True:
          

          用 if 语句替换循环


          你被“拒绝”是因为

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

          在这里,您将字符串等同于元组,而不是检查字符串是否包含在元组中。试试这个:

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2019-07-19
            • 2012-12-15
            • 1970-01-01
            • 2013-08-07
            • 1970-01-01
            • 1970-01-01
            • 2021-05-30
            相关资源
            最近更新 更多