我试图将由2个浮点数和3个部分文本组成的元组转换为一个字符串,以便我可以在file.write()中使用它,因为它不接受元组。
testr = 'you went' ,speed ,'mph and stopped in' ,stop ,'meters'
test = open('testresults.txt' ,'w')
test.write(testr)
test.close()
每当我尝试运行该程序时,它都会给我这个
test.write(testr)
TypeError: must be str, not tuple
答案 0 :(得分:2)
使用format
:
testr = 'you went {} mph and stopped in {} meters'.format(speed, stop)
答案 1 :(得分:1)
与其他答案不同,这将采用您提出的元组:
testr = 'you went' ,speed ,'mph and stopped in' ,stop ,'meters'
test = open('testresults.txt' ,'w')
test.write(" ".join(str(i)for i in testr))
test.close()
由于只有第三行与您的代码不同,所以解释如下:
首先str(i)for i in testr
:
内联for
- 循环在python中称为list comprhension。它只是迭代你的testr
元组,逐个返回值。 str(i)
是一个类型转换,它会尝试将i
转换为字符串。这是必要的,因为在您的元组中,某些条目为String
- 类型,而某些变量是某种类型的数字,可能是Float
或Integer
。有关详细信息,请参阅str(),float()和int()。
然后" ".join(...)
:
这是字符串类型的函数,它接受字符串的列表或元组,并且,如名称sugest,将它连接在一起,由它所作用的子字符串分隔,点的前面部分(" "
)。这对我来说总觉得有点奇怪,或者从里到外,但它仍然是一个非常有用的功能!
我希望这有帮助!
答案 2 :(得分:0)
将其转换为String
test.write(str(testr))
答案 3 :(得分:0)
值得庆幸的是,python 3.6使我们非常容易阅读:
testr = f'you went {speed} mph and stopped in {stop} metres'
test = open('testresults.txt' ,'w')
test.write(testr)
test.close()
否则,使用另一个答案中提到的string.format(*args)
可以实现同样的目的。