ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
# 练习10.那是什么? 在习题 9 中我们接触了一些新东西。我让你看到两种让字符串扩展到多行的方法。第一种方法是在月份之间用 `\n` (back-slash n )隔开。 这两个字符的作用是在该位置上放入一个“新行(new line)”字符。 使用反斜杠 `\`(back-slash) 可以将难打印出来的字符放到字符串。针对不同的符号有很多这样的所谓“转义序列(escape sequences)”,但有一个特殊的转义序列,就是 双反斜杠(double back-slash) `\\` 。这两个字符组合会打印出一个反斜杠来。接下来我们做几个练习,然后你就知道这些转义序列的意义了。 另外一种重要的转义序列是用来将单引号 ' 和双引号 " 转义。想象你有一个用双引号引用起来的字符串,你想要在字符串的内容里再添加一组双引号进去,比如你想说 `"I "understand" joe."`,Python 就会认为 "understand" 前后的两个引号是字符串的边界,从而把字符串弄错。你需要一种方法告诉 python 字符串里边的双引号是字符串而不是真正的双引号。 要解决这个问题,你需要将双引号和单引号转义,让 Python 将引号也包含到字符串里边去。这里有一个例子: ~~~ "I am 6'2\" tall." # 将字符串中的双引号转义 'I am 6\'2" tall.' # 将字符串中的单引号转义 ~~~ 第二种方法是使用“三引号(triple-quotes)”,也就是 `"""`,你可以在一组三引号之间放入任意多行的文字。接下来你将看到用法。 ~~~ tabby_cat = "\tI'm tabbed in." persian_cat = "I'm split\non a line." backslash_cat = "I'm \\ a \\ cat." fat_cat = """ I'll do a list: \t* Cat food \t* Fishies \t* Catnip\n\t* Grass """ print tabby_cat print persian_cat print backslash_cat print fat_cat ~~~ ## 你看到的结果 注意你打印出来的制表符,这节练习中的文字间隔对于答案的正确性是很重要的。 ~~~ $ python ex10.py I'm tabbed in. I'm split on a line. I'm \ a \ cat. I'll do a list: * Cat food * Fishies * Catnip * Grass ~~~ ## 转义序列 | 转义字符 | 实现功能 | |-----|-----| | \ | Backslash () | | \' | Single-quote (') | | \" | Double-quote (") | | \a | ASCII bell (BEL) | | \b | ASCII backspace (BS) | | \f | ASCII formfeed (FF) | | \n | ASCII linefeed (LF) | | \N{name} | Character named name in the Unicode database (Unicode only) | | \r ASCII | Carriage Return (CR) | | \t ASCII | Horizontal Tab (TAB) | | \uxxxx | Character with 16-bit hex value xxxx (Unicode only) | | \Uxxxxxxxx | Character with 32-bit hex value xxxxxxxx (Unicode only) | | \v | ASCII vertical tab (VT) | | \ooo | Character with octal value ooo | | \xhh | Character with hex value hh | 这里有一小段有意思的代码,尝试说明它们实现了什么功能: ~~~ while True: for i in ["/","-","|","\\","|"]: print "%s\r" % i, ~~~ ## 附加题 > 1. 通过把它们写在卡片上记住所有的转义序列。 > 1. 使用`'''`(三个单引号)取代三个双引号,看看效果是不是一样的? > 1. 结合转义序列和格式字符串创建一个更复杂的格式。 > 1. 记得 %r 格式化字符串吗?使用 %r 搭配单引号和双引号转义字符打印一些字符串出来。 将 %r 和 %s 比较一下。 注意到了吗?%r 打印出来的是你写在脚本里的内容,而 %s 打印的是你应该看到的内容。 ## 常见问题 ### Q:如果我想把所有的月份写在新的一行上,应该怎么做? > 像这样写就可以: `"\nJan\nFeb\nMar\nApr\nMay\nJun\nJul\nAug"` ### Q: 我还没有完全弄明白最后一句代码,我应该继续研究吗? > 当然要继续。把每次练习题中你不明白的地方记下来。当你完成更多的练习的时候,定期检查你的笔记,看看你是否可以明白笔记中的内容。有时候你可能需要回去看看之前做过的练习,并且重复的完成它们。 ### Q: 是什么让`\\`不同于其他的转义字符? > 这是一种简单的写出 (`\`)字符的方法. 自己想想为什么我们需要`\\` ### Q:为什么我写`//`或者`/n`的时候,代码没有生效。 > 因为你用的是`/` 而不是`\`.这两个是不同的字符串,他们的作用也是不一样的。 ### Q:当我使用`%r` 格式的时候,转义字符都没有生效。 > 因为`%r` 打印出来的是你写在脚本里的内容, 这当然也会包含原始的转移序列的字符。可以使用`%s`。一定要记住:`%r`是调试用的,而`%s` 才是显示输出用的。 ### Q:我没有明白附加题3.你所说的“结合”转义序列和格式是什么意思? > 你需要明白一点,所有的这些练习题,都可以结合起来解决一些难题。这节练习带你了解了格式化字符串,你可以结合使用格式化字符串和转义字符写一些新的代码。 ### Q: `'''` 和`"""`哪个更好? > 这个只依赖于你的代码风格。 现在可以使用`'''` (三个单引号),但是也要做好准备别人都在用的,感觉更好的方式。