你的第一個問題是這樣的一行:
number = float(int(inFile.readline().split())
你有四個(
S,但只有3 )
秒。
因此,Python期待表達式繼續下一行,但它看到一個=
,它不能出現在表達式的中間,因此它會產生一個SyntaxError
。
當你在看起來非常好的線上看到SyntaxError
時,有兩件好事可以嘗試。
首先,打破排隊成小塊,鍵入這些小片放入交互式解釋等
其次,一旦你確定這條線是罰款,看它上面的線和計數括號(括號和大括號)。一個好的編輯器可以更容易地發現 - 或者只需在交互式解釋器中輸入該行;如果你還沒有關閉所有的括號,它會給你一個...
而不是>>>
,這意味着它正在等待你完成前一行,而不是等待一個完整的新行。
一旦你過去,你會得到一個ValueError
,因爲你試圖調用int
在您從readline
回來一個三list
字符串。這是行不通的;你必須在每一個上撥打int
。所以,與其這樣:
numbers = float(int(inFile.readline().split()))
這樣做:
numbers = [float(int(number)) for number in inFile.readline().split()]
如果你還沒有學會列表理解的是,你必須做一個循環來代替。例如:
numbers = inFile.readline().split()
for n in range(len(numbers)):
numbers[n] = float(int(numbers[n]))
順便說一句,我不知道你爲什麼在做float(int(…))
。如果你想把它們全部截成整數值,你不需要這裏的float
-乘以.3的整數就可以了。如果你想保留任何小數部分,你不需要int
。所以,只用一個或另一個。
你做下一行同樣的事情:
avg = float(int(number[0]* .3 + number[1]* .1 + number[2]* .6))
的number[0]* .3 + number[1]* .1 + number[2]* .6
結果是float
,像89.1
喬治。然後你將它轉換成int
,這會給你89
。然後將其轉換回float
,得到89.0
。我無法想象這是你想要的 - 你可能想要將未轉換的89.1
,或截取的89
作爲int
,而不是89.0
作爲誤導float
。
此外,你打印出來的東西的方式是非常奇怪的,我不知道它應該做的:
print("name[0 , len(name)]'s Score is",avg,"bacons.")
這將打印出類似這樣:
name[0 , len(name)]'s Score is 89.0 bacons.
如果您想打印一個變量的值,不要把它放在引號:
print(name, "'s Score is",avg,"bacons.")
但是無論你試圖用0
和len(name)
......好,我不知道你在做什麼,所以我不能解釋如何去做。
無論如何,這將打印:
George 's Score is 89.0 bacons.
你可能不希望George
後的空間,對不對?解決這個問題的最好方法是使用字符串格式化:
print("{}'s Score is {} bacons'".format(name, avg))
如果你還沒有了解到的是,說實話,我認爲最好的辦法是隻處理了額外的空間,或者可能改寫句子所以它的不是一個問題:
print(name, 'has a score of', avg, 'bacons.')
或者,當然,你自己學習之前,老師得到它。這並不複雜。
最後,當你過去,你就只能讀一個名字和號碼的列表,而不是numVals
值得他們。要做到這一點,你需要一個循環:
def main():
inFile = open("input.txt","r")
numVals = int(inFile.readline())
for i in range(numVals):
name = inFile.readline()
# ... the rest of your code that happens for each player
# ... the code that happens after all the players, like inFile.close()
「試圖使用inFile」是什麼意思?是否有一些名爲「inFile」的庫或程序,或者你是否只是想說出你的變量的名稱? (另外,我看到你已經添加了「infile」作爲標籤,但該標籤沒有任何描述。) – abarnert 2013-02-16 00:18:01
同時,永遠不要說「一直返回那個avg是無效的語法」。向我們展示實際的'SyntaxError',帶回溯。 – abarnert 2013-02-16 00:19:10
N個數字的平均值(或算術平均值)是sum(numbers)/ N而不是float(int(number [0] * .3 + number [1] * .1 + number [2] * .6)) '如果有什麼是某種加權平均值(或平均值)。 – martineau 2013-02-16 03:20:12