嵌套循环中的EOF错误

时间:2014-03-04 03:07:25

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

这个程序有点痛苦。它必须找到平均温度。如果它低于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

关于如何让这个程序运行的任何想法都将非常感激。作为旁注,我们不允许使用原始输入,这似乎是此

的最常见解决方案

2 个答案:

答案 0 :(得分: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)

答案 1 :(得分:0)

假设您使用的是Python 3.x,删除eval()应该适用于input(...)

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

可以找到input的Python 3文档here

编辑听起来你需要将你的temp变量转换为int,然后从input()方法获取它,默认情况下是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循环中将此值转换为float。

<强> EDIT2

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

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

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