我已经开始用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')
Run Code Online (Sandbox Code Playgroud)
要浓缩为一行代码.我尝试了以下一些方法:
target.write(line1 \n, line2 \n, line3 \n)
Run Code Online (Sandbox Code Playgroud)
要么:
target.write('line1 \n, line2 \n, line3 \n')
Run Code Online (Sandbox Code Playgroud)
要么:
target.write(%r \n, %r \n, %r \n) % (line1, line2, line3)
Run Code Online (Sandbox Code Playgroud)
我无法让它在同一行中重写line1,line2和line3字符串.我已经尝试了各种其他组合,包括逗号,引号等.我不断出现各种错误,例如无效语法或我有太多参数.
Win*_*ert 46
target.write(line1 \n, line2 \n, line3 \n)
Run Code Online (Sandbox Code Playgroud)
'\n'只在字符串文字中有意义.没有引号,您没有字符串文字.
target.write('line1 \n, line2 \n, line3 \n')
Run Code Online (Sandbox Code Playgroud)
好的,现在一切都是字符串文字.但是你想要line1,line2,line3不是字符串文字.你需要那些作为python表达式来引用有问题的变量.基本上,你必须在字符串周围加上引号,这些字符串实际上是文本,如"\n"而不是变量.如果你这样做,你可能会得到类似的东西:
target.write(line1 '\n' line2 '\n' line3 '\n')
Run Code Online (Sandbox Code Playgroud)
什么是2 2
?没什么.你必须指定python如何组合这两个部分.所以,你可以有2 + 2
或2 * 2
,但2 2
没有任何意义.在这种情况下,我们使用add来组合两个字符串
target.write(line + '\n' + line2 + '\n' + line3 + '\n')
Run Code Online (Sandbox Code Playgroud)
继续,
target.write(%r \n, %r \n, %r \n) % (line1, line2, line3)
Run Code Online (Sandbox Code Playgroud)
再次\n
只在字符串文字中有意义.用于生成字符串的%运算符将字符串作为其左侧.因此,您需要字符串中的所有格式详细信息.
target.write('%r \n', '%r \n', '%r \n') % (line1, line2, line3)
Run Code Online (Sandbox Code Playgroud)
但是产生3个字符串文字,你只需要一个.如果你这样做,写下抱怨,因为它排除了一个字符串,而不是3.所以你可能尝试过类似的东西:
target.write('%r \n%r \n%r \n') % (line1, line2, line3)
Run Code Online (Sandbox Code Playgroud)
但是您想将line1,line2,line3写入文件.在这种情况下,您在写入完成后尝试格式化.当python执行它时,它将首先运行target.write:
None % (line1, line2, line3)
Run Code Online (Sandbox Code Playgroud)
哪个没什么用处.为了解决这个问题,我们需要把它% ()
放进去.write()
target.write('%r\n%r\n%r\n' % (line1, line2, line3))
Run Code Online (Sandbox Code Playgroud)
你的最后一次尝试很有希望 它应该看起来像:
"%s \n %s \n %s" % (line1, line2, line3)
Run Code Online (Sandbox Code Playgroud)
这将运算符应用于%
字符串(具有3个%s
占位符)和要替换的值元组(此处为字符串).结果是格式化的字符串.
所以你需要将它包装在获取结果的函数中:
target.write("%s \n %s \n %s" % (line1, line2, line3) )
Run Code Online (Sandbox Code Playgroud)