練習 10 那是什么?
在練習 9 中我教了你一些新東西。這兩天我們一直在學習字符串。我教了你兩種創建多行字符串的方式,第一種是在月份中間加 \n
,它可以實現換行。
\
這個字符可以把沒法輸入的字符轉化成字符串。有很多你可能會用到的“轉義字符”(escape scequence),我們會在接下來的練習中學到一些,以便你理解我說的意思。
一個很重要的轉義字符就是轉義單引號或者雙引號。比如你要在一個用雙引號引起來的字符串中再加一對雙引號,就像這樣:"I "understand" joe."
,python 就會懵掉,因為它會認為 understand 后面的雙引號就代表這個字符串已經結束了。所以你需要用一種方式告訴 python 字符串里面的雙引號并不是一個真正的雙引號。
要解決這個問題,你得轉義雙引號和單引號,讓 python 知道得把它們包含在字符串里。例如:
"I am 6'2\" tall." # escape double—quote inside string
'I am 6\'2" tall.' # escape single—quote inside string
第二種方法是用三個雙引號,即 """
,這樣就能像字符串一樣運行,而且你可以多輸入幾行,最后再以 """
結尾即可。我們來做個練習。
ex10.py
1 tabby_cat = "\tI'm tabbed in."
2 persian_cat = "I'm split\non a line."
3 backslash_cat = "I'm \\ a \\ cat."
4
5 fat_cat = """
6 I'll do a list:
7 \t* Cat food
8 \t* Fishies
9 \t* Catnip\n\t* Grass
10 """
11
12 print(tabby_cat)
13 print(persian_cat)
14 print(backslash_cat)
15 print(fat_cat)
你會看到
找一找你輸入的 tab
符號(即 \t
),在這個練習中空格很重要,別弄錯了。
$ 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
轉義字符
這是 python 支持的所有的轉義字符了。你可能用不到這么多,但是記住它們的格式以及用法。在一些字符串里試著用用它們,看看能不能成功運行。
附加練習
- 記住所有的轉義字符??梢园阉鼈兲砑拥娇ㄆ蟻碛?。
- 改用三個單引號(
'''
),你知道什么情況下用它而不是三個雙引號("""
)嗎?- 把轉義字符和格式字符串結合起來創建一個更復雜的字符串。
常見問題
我還是沒完全理解前面的練習,我該繼續往下學嗎? 是的,繼續學,別停在這兒。把你不明白的東西記在本子上,定期復習,等你做完更多的練習看你能不能理解。有時候你可能需要回過頭去重新做做之前的練習才能明白。
雙反斜杠 \\
和其他符號有什么區別? 它只是為了讓你能把單反斜杠 \
打印出來,想想你為什么要用 \\
。
我要是用 //
或者 /n
就不行。 因為你用的是斜杠而不是反斜杠。它們是不同的符號,有著不同的作用。
我不明白附加練習的第 3 題。你說的把轉義字符和格式字符串結合起來是什么意思? 我需要你理解一個概念,就是這些練習都可以結合起來解決問題。用你知道的關于格式字符串的東西和本練習學到的轉義字符寫一些新的代碼。
'''
和 """
用哪個更好? 這完全基于風格?,F在先用 '''
,當你感覺用 """
更好或者別人都用它的時候你可以用 """
。
練習 11 問問題
現在可以緩一緩了。前面我們做了大量的打印練習,以讓你熟悉這些簡單的東西,但是的確,它們很無聊。我們現在要做的是在你的程序里放入數據。這塊有點復雜,因為你得學著做兩件你可能一下子理解不了的事情。但是相信我,無論如何先試試看。做幾個練習之后你就會明白。
大多數軟件就是做如下事情:
- 從用戶那里獲得一些輸入。
- 改一改。
- 打印出來一些東西以顯示它變成了什么。
到現在為止你一直在打印東西,但是你還不知道怎么從用戶那里獲得 input
(輸入)。你甚至不知道“input”是什么意思。不管怎樣,準確無誤地輸入這些代碼,在下一個練習中我們會做更多的操作來解釋 input
。
ex11.py
1 print("How old are you?", end=' ')
2 age = input()
3 print("How tall are you?", end=' ')
4 height = input()
5 print("How much do you weigh?", end=' ')
6 weight = input()
7
8 print(f"So, you're {age} old, {height} tall and {weight} heavy.")
警告! |
---|
我們在每一個打印行末尾放一個 end=' ' ,是為了告訴 print 不要另起一行。 |
你會看到
練習 11 會話
$ python3.6 ex11.py
How old are you? 38
How tall are you? 6'2"
How much do you weigh? 180lbs
So, you're 38 old, 6'2" tall and 180lbs heavy.
附加練習
- 上網查查 python 的
input
是干嘛的。- 你能找到它的其他使用方式嗎?輸入你找到的一些例子。
- 再寫一個像這樣的格式,來問一些問題。
常見問題
我如何從別人那里獲得一些數字來做數學運算? 這就有點高級了,你可以試試輸入 x = int(input())
,這樣可以從 input()
里面獲取到字符串形式的數字,再用 int()
把它們轉化成數值。
我把我的體重作為 input
像這樣輸入進去:input("6'2")
,但是不能正常運行。 你別把你的體重放在那兒,你得直接在 Terminal 里面輸入。首先,回去輸入我讓你輸的代碼;然后,運行腳本,當它暫停的時候,用你的鍵盤輸入你的體重。這才是正確的做法。
練習 12 提示用戶
當你輸入 ()
的時候,一定要確保輸入完整,它們是成對出現的。對于 input
來說,你還可以給用戶放一個提示,讓他知道該輸入什么。你可以把提示的字符串放在 ()
里面,就像這樣:
y = input("Name?")
這個提示告訴用戶輸入“名字”,然后把結果放到變量 y 里面。通過這種方式你就可以問用戶問題然后得到他輸入的答案。
這意味著我們可以重新寫我們之前的練習,就用 input
來做所有的提示。
ex12.py
1 age = input("How old are you? ")
2 height = input("How tall are you? ")
3 weight = input("How much do you weigh? ")
4
5 print(f"So, you're {age} old, {height} tall and {weight} heavy.")
練習 12 會話
$ python3.6 ex12.py
How old are you? 38
How tall are you? 6'2"
How much do you weigh? 180lbs
So, you're 38 old, 6'2" tall and 180lbs heavy.
附加練習
- 在 Terminal 里輸入
pydoc input
,看看它會說什么。如果你用的是 Windows, 輸入python3.6 -m pydoc input
。- 輸入
q
,退出pydoc
。- 到網上查查
pydoc
命令的作用。- 用
pydoc
讀一讀關于open
,file
,os
,和sys
的內容;瀏覽一遍即可,把有意思的東西記下來。
常見問題
為什么我每次運行 pydoc
都會收到錯誤信息:SyntaxError: invalid syntax
? 要么你沒在命令行運行 pydoc
,要么你先運行了 python3.6,先退出 python3.6 再運行 pydoc
。
為什么我的 pydoc
沒有像你的一樣暫停? 有時候如果幫助文件很短,一屏足以放下的話,pydoc
就只會把它打印出來。
當我運行 pydoc
的時候我會收到 more is not recognized as an internal
。 一些 Windows 版本沒有這個命令,你可以跳過這個小題,需要它的時候在網上搜搜 Python documentation 即可。
為什么我不能用 print("How old are you?", input()) ?
你能,只不過 input()
的結果不會被保存到一個變量里,它會以一種奇怪的方式運行。你可以試試,然后試著打印你輸入的東西,看看你能不能搞明白為什么它無法運行。