【问题标题】:Stuck in an infinite loop. Python陷入无限循环。 Python
【发布时间】:2020-07-22 02:45:55
【问题描述】:

我试图让这段代码运行,这样当我输入“完成”时,它就会让我跳出循环。问题是我放了一个 try/except 来尝试捕获任何不是数字的东西并反馈和错误消息。这会在 if 语句之前捕获,这将使我脱离循环,而是反馈错误消息并将我捕获到无限循环中。我已经尝试在所有 if/else 语句之后移动 try/except ,但随后字符串被放置在最大值内,这不是我想要的完成。有没有办法让我尝试并运行,但仍然允许我通过“完成”命令退出循环?

largest = None
smallest = None

while True:
    num = input("Enter a number: ")
    try:
        num = float(num)
    except:
        print('Invalid Input')
        continue
    if num == "done" :
        break
    elif largest is None:
        largest = num
    elif smallest is None:
        smallest = num
    elif largest < num:
        largest = num
    elif smallest > num:
        smallest = num

    print(num)

print("Maximum", largest)
print("Minimum", smallest)

【问题讨论】:

    标签: python python-3.x


    【解决方案1】:

    首先测试done,然后转换为浮点数

    你可以简化测试

    如果您不输入任何数字或输入一个数字,程序应该可以运行

        num = input("Enter a number: ")
        if num == "done" :
            break
        try:
            num = float(num)
        except:
            print('Invalid Input')
            continue
        largest = largest or num
        smallest = smallest or num
        largest = max(num, largest)
        smallest = min(num, smallest)
    

    【讨论】:

    • @kahanrobinson 我在 C++ 和 Python 中编程很多,|| 在 Python 中无效 or
    【解决方案2】:

    原因是您在检查 "done" 之前使用检查输入是否为浮点数,所以当它实际上是 "done" 时,它会在检查之前继续。

    我会这样解决。

    largest = None
    smallest = None
    
    while True:
        num = input("Enter a number: ")
    
        # check if it's done first
        if num == "done" :
            break
    
        try:
            num = float(num)
        except:
            print('Invalid Input')
            continue
    
        elif largest is None:
            largest = num
        elif smallest is None:
            smallest = num
        elif largest < num:
            largest = num
        elif smallest > num:
            smallest = num
    
        print(num)
    
    print("Maximum", largest)
    print("Minimum", smallest)
    

    【讨论】:

      【解决方案3】:

      改变这个:

      try:
          num = float(num)
      except:
          print('Invalid Input')
          continue
      
      if num == "done":
          break
      

      到这里:

      try:
          num = float(num)
      except:
          if num == "done":
              break
      
          print('Invalid Input')    
          continue
      

      通过将if 放在except 中,您允许循环在break 之前到达continue

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-11-20
        • 1970-01-01
        • 1970-01-01
        • 2020-05-13
        • 1970-01-01
        相关资源
        最近更新 更多