我正在尝试为我的游戏创建排行榜。游戏结束后,它将询问姓名并计算分数。但是,当我将名称和分数写入leaderboard.txt文件并尝试再次将其导入时,我无法将数字从字符串转换回int。我需要将其转换回int,以便我可以按获得的最高得分对排行榜进行排序,或者我可以?
score = 5
name = "Adam"
file = open("leaderboard.txt", "a+")
file.write(name+" ")
file.write(str(score)+"\n")
file.close()
file = open("leaderboard.txt", "r")
list_of_lists = []
for line in file:
list_line = line.split()
list_of_lists.append(list_line)
for x in range(0,len(list_of_lists)):
if list_of_lists[x][1].isdigit == True:
x = int(x)
print(list_of_lists)
这不起作用,数字保留字符串,但是没有错误出现。我真的不知道我在想什么。这是将名称和分数写入.txt文件的正确方法吗?有没有更好的方法来考虑这一点?我真的很想得到帮助。
答案 0 :(得分:0)
几乎总是最好将您的代码转换为最适合其余代码的格式,并尽可能靠近入口点。您的代码希望有一个字符串和一个整数。在从文件中读取数据时进行转换,然后将其添加到list_of_lists
结构中:
score = 5
name = "Adam"
file = open("leaderboard.txt", "a+")
file.write(name+" ")
file.write(str(score)+"\n")
file.close()
file = open("leaderboard.txt", "r")
list_of_lists = []
for line in file:
list_line = line.split()
list_line[1] = int(list_line[1]) # This is the new code
list_of_lists.append(list_line)
print(list_of_lists)
这样做,list_of_lists
中包含的内部数据结构将完全包含程序其余部分所需的内容;无需后续转换。您会注意到我的示例省略了第二个for
循环;我们在初始读取时处理了转换。
int
是这里的新概念。但是,通过在文件读取循环中进行此操作,可以避免在后续循环中进行其他后处理。
作为一个单独的注释,如果输入文件中的某行不符合预期,通常对要发生的事情有所了解通常是个好主意;输入验证。例如,您可能希望安静地跳过空白行,并且可能向STDERR发出警告,然后跳过覆盖所有不遵循“ string [space]整数”格式的行。