我正在用Python编写骰子游戏,程序结束时,它在单独的行中写入前5个得分,并在外部文件中记录了玩家的名字。我已经将此代码编写在一个单独的文件中进行测试,但是运行它时出现以下错误:
filename.write (var)
TypeError: must be str, not float
这是我处理文件的源代码。
L = [29.4, 29.2, 1.4, 2.9, 2.3]
print (L)
x = len (L)
filename = open ('Scores.txt','rt')
filename.close
if x == 5:
for i in range (0,5):
var = (L[i])
print(var)
filename.write (var)
filename.close
如果有人可以提供帮助,将不胜感激:)
答案 0 :(得分:1)
要回答您的问题,并还要清理代码。...
您可以使用str()运算符将项目转换为字符串。
filename.write(str(var))
此外,使用with
命令打开文件被认为是标准且更安全。它为您处理异常,并自动关闭文件。
此外,遍历列表的索引被认为是非Python的。最好执行for item in list
,这样可以为您提供项目,而无需进行列表访问(list[i])
。
因此,最终,更干净的版本将如下所示:
L = [29.4, 29.2, 1.4, 2.9, 2.3]
print(L)
with open('Scores.txt','w') as filename:
for item in L[:5]: #For each item in the first 5 items
print(item)
filename.write(str(item))
答案 1 :(得分:0)
您需要将var转换为字符串:
filename.write(str(var))
答案 2 :(得分:0)
您需要使用str(L [i])
将浮点数转换为字符串L = [29.4, 29.2, 1.4, 2.9, 2.3]
print (L)
x = len (L)
filename = open ('Scores.txt','rt')
if x == 5:
for i in range (0,5):
var = (str(L[i]))
print(var)
filename.write (var)
filename.close()
此外,filename.close是一种方法,您需要在括号中调用它
请注意,使用with
陈述是更标准的做法
L = [29.4, 29.2, 1.4, 2.9, 2.3]
print (L)
x = len (L)
with open ('Scores.txt','rt') as filename:
if x == 5:
for i in range (0,5):
var = (str(L[i]))
print(var)
filename.write (var)
那样,即使有任何异常,python也会自动关闭文件