2014-03-04 128 views
0

这个程序有点痛苦。它必须找到平均温度。如果它低于60,它必须统计出有多少个数(平均出来的数)在60以下。如果平均温度高于80,它必须对80以上的任何数做同样的事情。编辑:而不是询问用户#的价值,该程序将继续接受,直到给一个空白值。这是我的程序:嵌套循环中的EOF错误

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之间切换温度的变化。我经常收到错误,更常见的是,这个错误。

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 

有关如何让此程序运行的任何想法将不胜感激。作为一个侧面说明,我们是不允许使用原始输入,这似乎是这个

回答

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) 
0

假设你在Python 3.x的是,除去eval()应与input(...)

temp = input("enter a number, <enter> to quit: ") 
工作中最常见的解决方案

input Python的3文档可以发现here

编辑这听起来像你需要您的临时变量转换成一个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循环中将这个值转换为float值。

EDIT2

在while循环改变它的:

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

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

+0

这给了另一条错误消息说,它不能添加字符串,并在该行浮sum = sum + temp。它也不会让我把temp转换成int或float – Manaar

+0

它只是说该字符串不能转换为float。你的想法是把)工作,但现在我得到这个错误: 文件“C:/Python33/heatingcooling.py”,第16行,在主 temp = int(input(“enter a编号,退出:“)) ValueError:无效文字为int()与基10:'' – Manaar

+0

使用浮点数,而不是int,并且应该解决此错误 – JohnZ