你的第一个问题是这一行:
number = float(int(inFile.readline().split())
你有四个(
s,但只有三个)
s。
因此,Python 期望表达式在下一行继续,但它看到一个=
不能出现在表达式中间的 ,所以它引发了一个SyntaxError
。
当你得到一条SyntaxError
看起来非常好的线路时,有两件好事可以尝试。
首先,将该行分成更小的部分,将这些更小的部分输入到交互式解释器中,等等。
其次,一旦你确定那条线没问题,看看它上面的那条线并计算括号(以及括号和大括号)。一个好的编辑器可以更容易地发现这一点——或者只需在交互式解释器中输入该行;如果你还没有关闭所有的括号,它会给你一个...
而不是>>>
,这意味着它正在等待你完成上一行,而不是等待一个全新的行。
一旦你超过了那个,你就会得到 a ValueError
,因为你试图调用你从 回来的三个字符串中int
的 a 。那是行不通的;你必须打电话给每一个。所以,而不是这个:list
readline
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
此处-将整数乘以 0.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
George。然后,您将其转换为int
,这将为您提供89
. 然后,您将其转换回float
,得到89.0
. 我无法想象这就是你想要的——你可能想要 unconverted 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()