我已经开始用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)
我无法让它在同一行中重写line1,line2和line3字符串。我已经尝试过各种其他组合,包括逗号,引号等。我不断出现各种错误,例如无效语法或我有太多的参数。
答案 0 :(得分:45)
target.write(line1 \n, line2 \n, line3 \n)
'\ n'只在字符串文字中有意义。如果没有引号,则表示没有字符串文字。
target.write('line1 \n, line2 \n, line3 \n')
好的,现在一切都是字符串文字。但是你想要line1,line2,line3不是字符串文字。你需要那些作为python表达式来引用有问题的变量。基本上,你必须在字符串周围加上引号,这些字符串实际上是文本,如“\ n”而不是变量。如果你这样做,你可能会得到类似的东西:
target.write(line1 '\n' line2 '\n' line3 '\n')
什么是2 2
?没什么。你必须指定python如何组合这两个部分。因此,您可以2 + 2
或2 * 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个字符串文字,你只想要一个。如果你这样做,写下抱怨,因为它排除了一个字符串,而不是3.所以你可能尝试了类似的东西:
target.write('%r \n%r \n%r \n') % (line1, line2, line3)
但是你想把line1,line2,line3写到文件中。在这种情况下,您在写入完成后尝试格式化。当python执行它时,它将首先运行target.write:
None % (line1, line2, line3)
哪个没什么用处。要解决此问题,我们需要将% ()
放在.write()
target.write('%r\n%r\n%r\n' % (line1, line2, line3))
答案 1 :(得分:6)
你最后的尝试看起来很有希望。它应该看起来像:
"%s \n %s \n %s" % (line1, line2, line3)
这将运算符%
应用于字符串(具有3个%s
占位符)和要替换的值元组(此处为字符串)。结果是格式化的字符串。
所以你需要将它包装在得到结果的函数中:
target.write("%s \n %s \n %s" % (line1, line2, line3) )
答案 2 :(得分:4)
这是一种方式:
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
是一个变量。当你把它放在引号中时,它不再被视为变量。
答案 3 :(得分:2)
以下线为我工作,
target.write(line1 + line + line2 + line + line3 + line)
在此之前我添加了
line = '\n'
我的代码如下:
from sys import argv
script, filename = argv
print 'Appending process starts on: %r' % filename
target = open(filename, 'a')
print 'Enter the contents:\t'
line1 = raw_input('Next:\t')
line2 = raw_input('Next:\t')
line3 = raw_input('Next:\t')
line = '\n'
target.write(line1 + line + line2 + line + line3 + line)
print 'Thank you !'
答案 4 :(得分:1)
作者建议使用格式,字符串和转义符,因此以下工作。这实现了Python的f字符串:
target.write(f"{line1} \n{line2} \n{line3} \n")
答案 5 :(得分:0)
请勿尝试使其过于复杂。该字符串的功能与打印内容时的功能相同,只是您以target.write开头,因此可以将其写入文件中,而不必打印。
例如,如果要打印变量并将它们放在新行中,则可以使用此字符串
print(f“ {line1} \ n {line2} \ n {line3} \ n”)
在练习5中,您了解了要引入变量,您需要在给变量赋予的名称前加上{},如果要将变量引入字符串,则必须以f开头字符串 在练习9中,您学会了使用\ n(如果想在新行中添加内容)
现在您要写入文件而不是打印文件,因此该字符串是相同的,只是这次以target.write开头 target.write(f“ {line1} \ n {line2} \ n {line3} \ n”)
答案 6 :(得分:0)
不确定这是否是pythonic方式,但是无论如何它都能完成工作。
a = f"""
{line1}
{line2}
{line3}
"""
target.write(a)
答案 7 :(得分:0)
LPTHW:练习16,学习练习3
此文件中重复太多。
使用字符串,格式和转义符仅通过一个target.write()
命令而不是六个命令即可打印出line1,line2和line3。
target.write#Study Drill 3的更强大实现
formatter = "{0}\n{1}\n{2}\n"
target.write(formatter.format(line1,line2,line3))
答案 8 :(得分:0)
此信息确实很有帮助。通过执行以下操作,我得到了正确的结果:
target.write(line1 + "\n" + line2 + "\n" + line3 + "\n")
串联的想法对我来说永远不会发生。
答案 9 :(得分:0)
target.write(第1行+''+第2行+''+第3行+'')
如果您希望将其放在同一行,则上面的命令将起作用,如果您希望其在单独的行中,请在新行上添加“ \ n”。
答案 10 :(得分:-1)
这对我有用。
target.write(“ line1 \ nline2 \ nline3 \ n”)
此外,Ewart提到了促使我点击的关键字,“'\ n'仅在字符串文字中有意义。”