# 練習6.字符串和文本
雖然你已經在程序中寫過字符串了,你還沒學過它們的用處。在這節練習中我們將使用復雜的字符串來建立一系列的變量,從中你將學到它們的用途。首先我們解釋一下字符串是什么。
字符串通常是指你想要展示給別人的、或者是你想要從程序里“導出”的一小段字符。Python 可以通過文本里的雙引號`"`或者單引號`'`識別出字符串來。這在你以前的 print 練習中你已經見過很多次了。如果你把單引號或者雙引號括起來的文本放到 print 后面,它們就會被 python 打印出來。
字符串可以包含格式化字符`%s`,這個你之前也見過的。你只要將格式化的變量放到字符串中,再緊跟著一個百分號 `%`(percent),再緊跟著變量名即可。 唯一要注意的地方,是如果你想要在字符串中通過格式化字符放入多個變量的時候,你需要將變量放到 `( )` 圓括號(parenthesis)中,而且變量之間用`,` 逗號(comma)隔開。就像你逛商店說“我要買牛奶、面包、雞蛋、湯”一樣,只不過程序員說的是”(milk, eggs, bread, soup)”。
我們將練習輸入大量的字符串、變量、和格式化字符,并且將它們打印出來。我們還將練習使用簡寫的變量名。程序員喜歡用高難度的簡寫來節約打字時間,所以我們現在就提早學會這個,這樣你就能讀懂并且寫出這些東西了。
~~~
x = "There are %d types of people." % 10
binary = "binary"
do_not = "don't"
y = "Those who know %s and those who %s." % (binary, do_not)
print x
print y
print "I said: %r." % x
print "I also said: '%s'." % y
hilarious = False
joke_evaluation = "Isn't that joke so funny?! %r"
print joke_evaluation % hilarious
w = "This is the left side of..."
e = "a string with a right side."
print w + e
~~~
## 你看到的結果
~~~
$ python ex6.py
There are 10 types of people.
Those who know binary and those who don't.
I said: 'There are 10 types of people.'.
I also said: 'Those who know binary and those who don't.'.
Isn't that joke so funny?! False
This is the left side of...a string with a right side.
~~~
## 附加題
> 1. 通讀程序,并給每一行加上注釋,解釋下這行的作用。
> 1. 找到所有的”字符串包含字符串”的位置,總共有四個位置。
> 1. 你確定只有四個位置嗎?你怎么知道的?也許我在騙你呢。
> 1. 解釋一下為什么用`+`連起來 w 和 e 就可以生成一個更長的字符串。
## 常見問題
### Q:`%r` 和 `%s`有什么不同?
> 用`%r`顯示的是變量“原始”的數據值,`%r`在打印的時候能夠重現它代表的對象,但其他的符號用來給用戶顯示變量值。看下面的例子理解一下:
> > text = "I am %d years old." % 22
print "I said: %s." % text
print "I said: %r." % text
> 返回的結果:
> > I said: I am 22 years old..
I said: 'I am 22 years old.'. // %r 給字符串加了單引號
### Q:我遇到這個報錯:not all arguments converted during string formatting.
> 你要重新檢查你的代碼是否跟示例中的一樣。發生這個錯誤的原因是你寫的`%`的格式化字符串數量大于你給出的變量數量。再檢查一遍,看你的代碼哪里出錯了。
### Q:為什么用`'(單引號)`標識字符串而不是其他的符號?
> 大部分情況下這只是一種風格,在一個用雙引號標識的字符串內部我也會用單引號來標識其中子串。看看代碼的第10行我是如何使用單雙引號的。如果你認為一個笑話很好笑,你能否些I`hilarious = True`? 答案當時是可以,而且,我們會在習題27中學到布爾值 。
- 序言
- 前言
- 簡介
- 0:安裝和準備
- 1:第一個程序
- 2:注釋和“#”井號
- 3:數字和數學計算
- 4:變量和命名
- 5:更多的變量和打印
- 6:字符串和文本
- 7:更多的打印(輸出)
- 8:打印, 打印
- 9:打印, 打印, 打印
- 10:那是什么?
- 11:提問
- 12:提示別人
- 13:參數, 解包, 變量
- 14:提示和傳遞
- 15:讀文件
- 16:讀寫文件
- 17:更多文件操作
- 18:命名, 變量, 代碼, 函數
- 19:函數和變量
- 20:函數和文件
- 21:函數的返回值
- 22:到目前為止你學到了什么?
- 23:閱讀代碼
- 24:更多的練習
- 25:更多更多的練習
- 26:恭喜你,可以進行一次考試了
- 27:記住邏輯
- 28:布爾表達式
- 29:IF 語句
- 30:Else 和 If
- 31:做出決定
- 32:循環和列表
- 33:while循環
- 34:訪問列表元素
- 35:分支和函數
- 36:設計和調試
- 37:復習符號
- 38:列表操作
- 39:字典,可愛的字典
- 40:模塊, 類和對象
- 41:學會說面向對象
- 42:對象、類、以及從屬關系
- 43:基本的面向對象的分析和設計
- 44:繼承Vs.包含
- 45:你來制作一個游戲
- 46:項目骨架
- 47:自動化測試
- 48:更復雜的用戶輸入
- 49:寫代碼語句
- 50:你的第一個網站
- 51:從瀏覽器獲取輸入
- 52:開始你的web游戲
- 來自老程序員的建議
- 下一步
- 附錄A:命令行教程
- 簡介
- 安裝和準備
- 路徑, 文件夾, 名錄 (pwd)
- 如果你迷路了
- 創建一個路徑 (mkdir)
- 改變當前路徑 (cd)
- 列出當前路徑 (ls)
- 刪除路徑 (rmdir)
- 目錄切換(pushd, popd)
- 生成一個空文件(Touch, New-Item)
- 復制文件 (cp)
- 移動文件 (mv)
- 查看文件 (less, MORE)
- 輸出文件 (cat)
- 刪除文件 (rm)
- 退出命令行 (exit)
- 下一步