2014-03-04 39 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