为什么我的变量没有被定义,我如何修复这个问题?

2024-10-03 15:30:29 发布

您现在位置:Python中文网/ 问答频道 /正文

with open("RoundOneTotalScores.txt") as f:
    lines = f.readlines()
    values = [int(line.split(',')[1]) for line in lines]
    smallest = (min(values))
    smallest2 = (sorted(values)[:2])
    highest4 = (sorted(values)[2:])

W1 = str(highest4[0])
W2 = str(highest4[1])
W3 = str(highest4[2])
W4 = str(highest4[3])

Myfile = open("RoundOneTotalScores.txt", "r")

for line in Myfile:
    if W1 in line.split(",")[1]:
        W1L = (line.split(",")[0])

for line in Myfile:
    if W2 in line.split(",")[1]:
        W2L = (line.split(",")[0])

for line in Myfile:
    if W3 in line.split(",")[1]:
        W3L = (line.split(",")[0])

for line in Myfile:
    if W4 in line.split(",")[1]:
        W4L = (line.split(",")[0])

Myfile = open("RoundOneWinners.txt", "a")

Myfile.write(W1L)
Myfile.write(",")
Myfile.write(W1)
Myfile.write("\n")
Myfile.write(W2L)
Myfile.write(",")
Myfile.write(W2)
Myfile.write("\n")
Myfile.write(W3L)
Myfile.write(",")
Myfile.write(W3)
Myfile.write("\n")
Myfile.write(W4L)
Myfile.write(",")
Myfile.write(W4)

Myfile.close()

上面的代码执行以下操作:打开一个文本文件,其中包含六个字母,每个字母都有一个数字。它找到这些数字中最高的四个,然后找到相等的字母。当我试图将其保存到新的文本文件时,出现以下错误:

^{pr2}$

为什么没有定义W2L?我如何定义它?在


Tags: intxtforiflineopenmyfilew1
3条回答

因为只有在该条件为true时才会定义:

if W2 in line.split(",")[1]:

编辑

添加了来自roganjosh和{a2}的推荐解。在

在顶部用空字符串定义所有W1L - W4L。在

^{pr2}$

或者在其他地方:

for line in Myfile:
    if W2 in line.split(",")[1]:
        W2L = (line.split(",")[0])
    else:
        W2L = ''

您不能像这样对文件进行多次迭代;在第一个循环完成之后,您已经到达了文件的末尾,接下来的三个循环将不会执行任何操作;没有更多的数据可供读取。在

相反,将循环组合成一个循环:

for line in Myfile:
    value, field = line.split(",")[0:2]
    if W1 in field:
        W1L = value

    if W2 in field:
        W2L = value

    if W3 in field:
        W3L = value

    if W4 in field:
        W4L = value

如果找不到相应的标记,则仍然存在未设置任何特定变量的风险。也有可能多次找到同一个标记,在这种情况下,您将只记录最后找到的一个。在

当您读取整个文件时,读取光标会到达文件的末尾。如果要再次阅读,则需要使用seek(0)将其设置为开头。在

Myfile = open("RoundOneTotalScores.txt", "r")

for line in Myfile:
    if W1 in line.split(",")[1]:
        W1L = (line.split(",")[0])

Myfile.seek(0)

for line in Myfile:
    if W2 in line.split(",")[1]:
        W2L = (line.split(",")[0])

相关问题 更多 >