Python inFile 有洛克

我正在尝试打开文件 python, 删除文件中的平均值 input.txt. 在拍摄平均值之后,例如,它们必须在每个人名称之后显示


<student>'s score is <avg> bacons.


我们还没有在课堂上讨论过它,所以我不太确定我的所作所为。 我假设我们必须使用循环,但我不太确定我如何实现它。

这是一个继续返回此代码 avg 作为一个不可接受的语法:


def main//:
inFile = open/"input.txt","r"/
numVals = int/inFile.readline///
name = inFile.readline//
number = float/int/inFile.readline//.split///
avg = float/int/number[0]* .3 + number[1]* .1 + number[2]* .6//
print/"name[0 , len/name/]'s Score is",avg,"bacons."/
inFile.close//

main//


输入文件包含


5
Amelia
90 100 75
George
87 90 90
Adam
100 80 85
Jenny
75 80 90
Carl
86 87 88


将欣赏这个问题的任何帮助。 我不知道该怎么做。
</avg></student>
已邀请:

冰洋

赞同来自:

你的第一个问题 - 这是这条行:


number = float/int/inFile.readline//.split///


你有四个
/

C,但只有三个
/

从。

所以 Python 期望在下行继续表达 , 但他看到了
=

, 它不能出现在表达的中间,因此它导致
SyntaxError

.

当你收到
SyntaxError

在看起来完全正常的线上,有两个好东西要尝试。

首先,将此线条分成较小的部分,将这些较小的零件输入到交互式解释器等。

其次,一旦确保这条线条是有序的,请查看它上方的线并计算括号 /和括号和括号/. 一个好的编辑器使得它更容易 - 或只是将字符串输入交互式解释器; 如果您还没有关闭所有括号 , 他会给你
...

反而
>>>

, 什么意味着他在完成前一行时等待,并不期待一个全新的字符串。

一旦你经过它,你就会得到
ValueError

, 因为你试图打电话
int


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

- 整数的衍生 .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//

小姐请别说爱

赞同来自:

最后,我明白了一切。 我的代码没有出于各种原因的作用,主要是 b / c 我不知道缩进有多重要


def main//:

inFile = open/"input.txt","r"/
numVals = int/inFile.readline///


for i in range/numVals/:

name = inFile.readline//.replace/"\n",""/
numbers = inFile.readline//.split//
avg = float/numbers[0]/*.3 + float/numbers[1]/*.1 + float/numbers[2]/*.6
print/name,'has a final score of',avg/


inFile.close//
main//

要回复问题请先登录注册