如何在一行中写入多个字符串?

2024-05-19 19:28:28 发布

您现在位置:Python中文网/ 问答频道 /正文

我已经开始用LPTHW学习Python,并且我已经开始练习16:

http://learnpythonthehardway.org/book/ex16.html

感觉自己像个白痴,因为我找不到一个看似简单的“额外学分”作业,它需要:

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

压缩成一行代码。我试过以下几种方法:

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

或:

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

或:

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

我只是无法让它重写行1、行2和行3字符串。我尝试过其他各种组合,包括逗号、引号等等,但总是出现各种错误,比如无效语法或参数过多。


Tags: orghttptargethtml作业write学分感觉
3条回答
target.write(line1 \n, line2 \n, line3 \n)

“\n”只在字符串文本中有意义。没有引号,就没有字符串文本。

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

好吧,现在一切都是字符串文字。但您希望第1行、第2行、第3行不是字符串文本。您需要这些作为python表达式来引用有问题的变量。基本上,必须在字符串周围加引号,这些字符串实际上是类似“\n”的文本,但不能在变量周围加引号。如果你那样做了,你可能会得到如下信息:

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

什么是2 2?没什么。您必须向python指定如何组合这两个部分。所以你可以有2 + 22 * 2但是2 2没有任何意义。在本例中,我们使用add组合两个字符串

target.write(line + '\n' + line2 + '\n' + line3 + '\n')

继续前进

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

同样,\n只在字符串文本中有意义。用于生成字符串的%运算符将字符串作为其左侧。所以你需要一个字符串中所有的格式化细节。

target.write('%r \n', '%r \n', '%r \n') % (line1, line2, line3)

但这会产生3个字符串文字,您只需要一个。如果你这样做了,write抱怨是因为它超过了一个字符串,而不是3。所以你可能试过这样的方法:

target.write('%r \n%r \n%r \n') % (line1, line2, line3)

但你想把第1行,第2行,第3行写进文件。在这种情况下,您将在写入完成后尝试格式化。当python执行此操作时,它将运行target.write first leaving:

None % (line1, line2, line3)

这没什么用。要解决这个问题,我们需要将% ()放在.write()

target.write('%r\n%r\n%r\n' % (line1, line2, line3))

有一种方法:

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

下面这些不起作用的原因

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

line1是一个变量(注意它没有被引用),但是'\n'是一个字符串文本(因为它是在引号中)。加法运算符被重载,以便字符串连接(组合)它们。

这不起作用的原因是:

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

是因为line1是一个变量。当你把它放在引号里时,它就不再被当作变量了。

你最后一次尝试看起来很有希望。它应该看起来像:

"%s \n %s \n %s" % (line1, line2, line3)

这将运算符%应用于字符串(带有3%s占位符)和要替换的值元组(这里是字符串)。结果是格式化的字符串。

所以你需要把它包装在函数中,得到结果:

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

相关问题 更多 >