我试图将骰子游戏分数写入文件,但是我遇到了这样的类型错误。 TypeError:write()参数必须为str,而不是元组

时间:2019-04-06 14:32:03

标签: python

im在python 3.7.2中创建骰子游戏,我需要将结果写入文本文件,但以当前格式会出现错误

我尝试过只转换为字符串,但这只会导致更多问题

file = open("dicegamescores.txt","w") 
x = str('on round',x,username1 ,'has',player1_score , '\n',username2'has', player2_score)
file.write(x) 
file.close

我希望根据循环将正确的变量值(“ on round”,x,username1,“ has”,player1_score,“ \ n”,username2,“ has”,player2_score写入文件中) 但是得到这个:

当不强制使用STR时:

Traceback (most recent call last):
  File "C:\Users\joelb\AppData\Local\Programs\Python\Python37\dicegame.py", line 45, in <module>
    file.write(x)
TypeError: write() argument must be str, not tuple

或者当我广播到STR:

Traceback (most recent call last):
  File "C:\Users\joelb\AppData\Local\Programs\Python\Python37\dicegame.py", line 44, in <module>
    x = str('on round', x, username1 , 'has', player1_score , '\n' , username2 , 'has', player2_score )
TypeError: str() takes at most 3 arguments (9 given)

3 个答案:

答案 0 :(得分:0)

应该是这样的:

x = 'on round {round} {user1} has {user1score} \n {user2} has {user2score}'.format(
round = x, user1 = username1, user1score = player1_score, user2= username2, user2score = player2_score)

使用.format()方法,您可以将值插入占位符,即round

答案 1 :(得分:0)

当您尝试以某种方式向文件中写入内容时,必须使用字符串,因此这就是第一个失败的原因。 第二个失败,因为(如错误所述)您尝试从未分组的元素中创建一个字符串。为了使这项工作有效,元素应为一个数组/列表,以便Python可以从中创建适当的字符串:

x = str(['on round',x,username1 ,'has',player1_score , '\n',username2'has', player2_score]) #See the square brackets

不过,更Python化的方式是:

x = "on round %s %s has %d \n %s has %d" % (x, username1, player1_score, username2, player2score)

%s插入字符串,%d插入整数,%f插入浮点数。有关此说明,请参见Learn Python

答案 2 :(得分:0)

嘿,您需要将x变量设置为字符串格式。 您可以使用以下代码:

file = open("dicegamescores.txt","w") 
x = ('on round',2,username1 ,'has',player1_score , '\n',username2,'has', player2_score)
xx = ("%s%s%s%s%s%s%s%s%s")%(x)
file.write(xx) 
file.close

对于变量中的每个字符串,您都应添加%s。