艰难学习Python:Ex16额外学分

时间:2011-09-19 20:40:37

标签: python

关于额外信贷的第3个问题,我很难过。有问题的代码是:

target.write(line1)
target.write("\n")
target.write(line2)
target.write("\n")
target.write(line3)
target.write("\n")

问题要求“使用字符串,格式和转义符只用一个target.write()命令而不是6来打印line1,line2和line3。

所以,我以为我会这样写:

target.write("%s + \n + %s + \n + %s + \n") % (line1, line2, line3)

它返回:TypeError:%支持的操作数类型:'NoneType'和'tuple。'我做了一些关于它们的研究并且找不到任何东西,但它使用%r返回了相同的错误。

认为+符号不正确,因为它只是一个字符串,我删除了它们:

target.write("%s \n %s \n %s \n") % (line1, line2, line3)

仍然没有。然后我试了一下:

target.write("%s" + "\n" + "%s" + "\n" + "%s" + "\n") % (line1, line2, line3)

这个至少将错误更改为:TypeError:%支持的操作数类型:'NoneType'和'str'。这种变化产生了同样的错误:

target.write("%s") % (line1 + line2 + line3)

无论如何,很明显我被困在某个地方。我认为我的问题集中在我正在使用的%s /%r上,但我找不到我认为可行的替代方案,或者我可能只是错误地写了写语句。

对不起,如果这种药开了,我只是想我会试着解释一下我的思维过程。谢谢你的帮助!

6 个答案:

答案 0 :(得分:17)

这个怎么样?

target.write("%s\n%s\n%s\n" % (line1, line2, line3))

答案 1 :(得分:1)

%插值运算符适用于字符串。您将它应用于target.write的返回值,该值不返回任何内容(因此为NoneType)。你想对字符串本身进行插值:

target.write("%s\n%s\n%s\n" % (line1, line2, line3) )

大多数学习Python的人在print语句的上下文中首先遇到%,所以认为它与输出紧密相关是可以理解的,但它在字符串级别完成所有工作。

答案 2 :(得分:0)

您的原始尝试尝试使用%运算符,返回值为target.write() - 即无。您需要在% ()内发生target.write {/ 1}}

target.write ( "%s\n%s\n%s\n" % (line1, line2, line3))

请注意,另一种解决方案是:

target.write('\n'.join([line1, line2, line3, '']))

修改

在末尾添加空字符串以强制第三个换行符(否则只会有两个换行符)。

答案 3 :(得分:0)

target.write需要str对象作为其args 并给出一个NoneType对象

答案 4 :(得分:0)

在Python 3中对我有用的另一种方法是:

target.write(f"{line1} \n{line2} \n{line3} ")

答案 5 :(得分:-1)

我本人使用此脚本在文件中为同一问题写了几行。  (使用python 3.6)

target.write(line1 + "\n" + line2 + "\n" + line3 + "\n")