【问题标题】:EOF error in nested loops嵌套循环中的 EOF 错误
【发布时间】:2014-03-04 03:07:25
【问题描述】:

这个程序有点痛苦。它必须找到平均温度。如果它低于 60,它必须计算有多少数字(平均出来)低于 60。如果平均温度高于 80,它必须对任何高于 80 的数字做同样的事情。编辑:而不是向用户询问 #的值,程序将继续接受,直到给出一个空白值。这是我的程序:

def main():

    sums = 0.0
    count = 0
    heating = 0
    cooling = 0
    temp = (input("enter a number, <enter> to quit: "))
    while temp != " ":
        x = float(temp)
        sums = sums + x
        count = count + 1
        temp = eval(input("enter a number, <enter> to quit: "))
        avg = sums/count
        if avg < 60:
            if temp < 60:
                heating = heating + 1
        if avg > 80:
            if temp > 80:
                cooling = cooling + 1

    print(avg, heating, cooling)

main()

这是我不断收到的错误。我尝试了在有和没有 eval 的情况下询问输入的变体,以及在 float 和 int 之间切换 temp。我不断收到错误,更常见的是这个。

Traceback (most recent call last):
  File "C:/Python33/heatingcooling.py", line 24, in <module>
    main()
  File "C:/Python33/heatingcooling.py", line 13, in main
    temp = eval(input("enter a number, <enter> to quit: "))
  File "<string>", line 0

   ^
SyntaxError: unexpected EOF while parsing

任何关于如何让这个程序运行的想法将不胜感激。作为旁注,我们不允许使用原始输入,这似乎是最常见的解决方案

【问题讨论】:

    标签: python-3.x while-loop nested-loops


    【解决方案1】:

    您当前的循环将tempx 混淆了几个地方。您需要对它们保持一致,因为它们是不同的类型(temp 是字符串,xfloat)。这是代码的固定版本,还有一些其他修复,例如测试空字符串并为 avg 提供初始值:

    sums = 0.0
    count = 0
    heating = 0
    cooling = 0
    avg = 0      # need an initial value for this, in case the first input is empty!
    temp = input("enter a number, <enter> to quit: ") # temp is always a string
    while temp:      # equivalent to testing temp != ""
        x = float(temp)
        sums = sums + x
        count = count + 1
        avg = sums/count
        if avg < 60:
            if x < 60:          # compare to x here, not temp
                heating = heating + 1
        if avg > 80:
            if x > 80:          # here too
                cooling = cooling + 1
    
        temp = input("enter a number, <enter> to quit: ") # moved this to the end of the loop
    
    print(avg, heating, cooling)
    

    【讨论】:

      【解决方案2】:

      假设您使用的是 Python 3.x,删除 eval() 应该可以与 input(...) 一起使用

      temp = input("enter a number, <enter> to quit: ")
      

      input 的 Python 3 文档可以在 here 找到

      编辑听起来你需要在从 input() 方法中获取临时变量后将其转换为 int,默认情况下为 str。

      temp = float(input("enter a number, <enter> to quit: "))
      

      此外,当您获得第一个 temp 变量时,请删除外括号:

      temp = (input("enter a number, <enter> to quit: "))
      

      temp = input("enter a number, <enter> to quit: ")
      

      假设您输入了一个数值,那么您应该能够在 while 循环内将该值转换为浮点数。

      编辑2

      在您的 while 循环中将其更改为:

      while temp:  # or while temp != ""
          # etc.
      

      这将解决ValueError: could not convert string to float 错误。您在输入空格“”时终止了 while 循环,但是当用户按 Enter 时,输入实际上是一个空字符串“”。因此,您仍在进入 while 循环,然后尝试将空字符串 "" 输入转换为浮点数,然后引发 ValueError。

      【讨论】:

      • 这只是给出了另一个错误消息,说它不能在 sum = sum + temp 的行中添加字符串和浮点数。它也不会让我将 temp 转换为 int 或 float
      • 它只是说字符串不能转换为浮点数。您放置 的想法奏效了。但现在我收到此错误:文件“C:/Python33/heatcooling.py”,第 16 行,在 main temp = int(input("enter a number, 退出:")) ValueError: int() 以 10 为基数的无效文字:''
      • 使用float,而不是int,应该解决这个错误。
      • @JohnZ 不起作用。现在我收到这个错误:ValueError: could not convert string to float:
      • @JohnZ 与之前的 ValueError 相同:无法将字符串转换为浮点数。
      猜你喜欢
      • 2018-09-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-12
      • 2012-10-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多