第二章、變量和簡單數(shù)據(jù)類型
2.1 運(yùn)行hello_world.py時發(fā)生的情況
運(yùn)行文件hello_world.py時,末尾的.py指出這是一個Python程序,因此編輯器將使用Python解釋器 來運(yùn)行它。Python解釋器讀取整個程序,確定其中每個單詞的含義。例如,看到單詞print 時,解釋器就會將括號中的內(nèi)容打印到屏幕,而不會管括號中的內(nèi)容是什么。
編寫程序時,編輯器會以各種方式突出程序的不同部分。例如,它知道print 是一個函數(shù)的名稱,因此將其顯示為藍(lán)色;它知道“Hello Python world!”不是Python代碼,因此將其顯示為橙色。這種功能稱為語法突出。
2.2 變量
在程序中可隨時修改變量的值,而Python將始終記錄變量的最新值。
message = "Hello Python world!"
print(message)
Hello Python world!
message = "Hello Python Crash Course world!"
print(message)
Hello Python Crash Course world!
2.2.1 變量的命名和使用
- 變量名只能包含字母、數(shù)字和下劃線。變量名可以字母或下劃線打頭,但不能以數(shù)字打頭,例如,可將變量命名為message_1,但不能將其命名為1_message。
- 變量名不能包含空格,但可使用下劃線來分隔其中的單詞。例如,變量名greeting_message可行,但變量名greeting message會引發(fā)錯誤。
- 不要將Python關(guān)鍵字和函數(shù)名用作變量名,即不要使用Python保留用于特殊用途的單詞,如print。
- 變量名應(yīng)既簡短又具有描述性。例如,name比n好,student_name比s_n好,name_length比length_of_persons_name好。
- 慎用小寫字母l和大寫字母O,因?yàn)樗鼈兛赡鼙蝗隋e看成數(shù)字1和0。
盡量使用小寫的Python變量名。在變量名中使用大寫字母雖然不會導(dǎo)致錯誤,但避免使用大寫字母是個不錯的主意。
2.2.2 使用變量時避免命名錯誤
程序無法成功地運(yùn)行時,解釋器會提供一個traceback。traceback是一條記錄,指出了解釋器嘗試運(yùn)行代碼時,在什么地方出現(xiàn)問題。
下面的程序注意錯誤類型:
NameError: name 'mesage' is not defined
message = "Hello Python Crash Course reader!"
print(mesage)
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
< ipython-input-3-c8f2adeaed02 > in < module >()
1 message = "Hello Python Crash Course reader!"
---- > 2 print(mesage)
NameError: name 'mesage' is not defined
練習(xí): 2-1 簡單消息:將一條消息存儲到變量中,再將其打印出來。2-2 多條簡單消息:將一條消息存儲到變量中,將其打印出來;再將變量的值修改為一條新消息,并將其打印出來。
simple_message = "Hello, Simple Message"
print(simple_message)
Hello, Simple Message
multi_message = "Multi Message 1"
print(multi_message)
multi_message = "Multi Message 2"
print(multi_message)
Multi Message 1
Multi Message 2
2.3 字符串
字符串
就是一系列字符。在Python中,用引號括起的都是字符串,其中的引號可以是單引號,也可以是雙引號。
str1 = "Hello, String 1"
print(str1)
str2 = 'Hello, String 2'
print(str2)
str3 = '''Hello, It's String 3'''
print(str3)
Hello, String 1
Hello, String 2
Hello, It's String 3
2.3.1 使用方法修改字符串的大小寫
name = "aDa loveLace"
#執(zhí)行每個單詞首字母大寫的方法
print(name.title())
#轉(zhuǎn)換為首字母大寫的方法
print(name.capitalize())
#全部轉(zhuǎn)換為大寫的方法
print(name.upper())
#全部轉(zhuǎn)換為小寫的方法
print(name.lower())
Ada Lovelace
Ada lovelace
ADA LOVELACE
ada lovelace
2.3.2 合并(拼接)字符串
first_name = "ada"
last_name = "lovelace"
#字符串拼接
full_name = first_name + " " + last_name
print(full_name)
print("Hello, "+full_name.title()+"!")
#格式化字符串
name = "{} {}".format(first_name,last_name)
print(name)
ada lovelace
Hello, Ada Lovelace!
ada lovelace
2.3.3 使用制表符或換行符來添加空白
要在字符串中添加制表符,可使用字符組合t;要在字符串中添加換行符,可使用字符組合n。
print("t pythont Hellon t World t In t love t you!n")
python Hello
World I
love you!
2.3.4 刪除空白
下例中,len()用來查看字符串的長度。
message = " Python is a good language. "
#去除左空格
print(message.lstrip(), len(message.lstrip()))
#去除右空格
print(message.rstrip(), len(message.rstrip()))
#去除兩邊的空格
print(message.strip(), len(message.strip()))
Python is a good language. 27
Python is a good language. 27
Python is a good language. 26
2.3.5 使用字符串時避免語法錯誤
語法錯誤
是指程序中包含非法的Python代碼時,就會導(dǎo)致語法錯誤。
例如,在用單引號括起的字符串中,如果包含撇號,就將導(dǎo)致錯誤。這是因?yàn)檫@會導(dǎo)致Python將第一個單引號和撇號之間的內(nèi)容視為一個字符串,進(jìn)而將余下的文本視為Python代碼,從而引發(fā)錯誤。
message = "One of Python's strengths is its diverse community."
print(message)
One of Python's strengths is its diverse community.
message = 'One of Python's strengths is its diverse community.'
print(message)
File "< ipython-input-12-a9250de55b39 >", line 1
message = 'One of Python's strengths is its diverse community.'
^
SyntaxError: invalid syntax
2.3.6 Python 2中的print 語句
在Python 2中,無需將要打印的內(nèi)容放在括號內(nèi)。從技術(shù)上說,Python 3中的print 是一個函數(shù),因此括號必不可少。有些Python 2 print 語句也包含括號,但其行為與Python 3中稍有不同。在Python 2代碼中,print可以包含括號,也可以不包含。
練習(xí):
2-3 個性化消息:將用戶的姓名存到一個變量中,并向該用戶顯示一條消息。顯示的消息應(yīng)非常簡單,如“Hello Eric, would you like to learn some Python today?”。
2-4 調(diào)整名字的大小寫:將一個人名存儲到一個變量中,再以小寫、大寫和首字母大寫的方式顯示這個人名。
2-5 名言:找一句你欽佩的名人說的名言,將這個名人的姓名和他的名言打印出來。輸出應(yīng)類似于下面這樣(包括引號):
Albert Einstein once said, “A person who never made a mistake never tried anything new.”
2-6 名言2:重復(fù)練習(xí)2-5,但將名人的姓名存儲在變量famous_person 中,再創(chuàng)建要顯示的消息,并將其存儲在變量message 中,然后打印這條消息。
2-7 剔除人名中的空白:存儲一個人名,并在其開頭和末尾都包含一些空白字符。務(wù)必至少使用字符組合"t" 和"n" 各一次。
打印這個人名,以顯示其開頭和末尾的空白。然后,分別使用剔除函數(shù)lstrip() 、rstrip() 和strip() 對人名進(jìn)行處理,并將結(jié)果打印出來。
#2-3
famous_name = 'Albert Einstein'
print("Hello {}, would you like to learn some Python today?".format(famous_name))
#2-4
print(famous_name.lower())
print(famous_name.upper())
print(famous_name.title())
#2-5 & 2-6
famous_clause = 'A person who never made a mistake never tried anything new.'
print('''{} once said, “{}”'''.format(famous_name, famous_clause))
# 2-7
famous_person = '''
albert einstein
'''
print(famous_person.lstrip())
print('----------------------')
print(famous_person.rstrip())
print('----------------------')
print(famous_person.strip())
print('----------------------')
Hello Albert Einstein, would you like to learn some Python today?
albert einstein
ALBERT EINSTEIN
Albert Einstein
Albert Einstein once said, “A person who never made a mistake never tried anything new.”
albert einstein
----------------------
albert einstein
----------------------
albert einstein
----------------------
2.4 數(shù)字
2.4.1 整數(shù)
在Python中,可對整數(shù)執(zhí)行加(+)減(-)乘(*)除(/)求余(%)運(yùn)算;使用兩個乘號(**)表示乘方運(yùn)算;使用括號來修改運(yùn)算次序,讓Python按你指定的次序執(zhí)行運(yùn)算。
print(2 + 3)
print(3 - 2)
print(2 * 3)
print(3 / 2)
print(3 % 2)
print(3 ** 2)
print(2 + 3 * 4)
print((2 + 3) * 4)
5
1
6
1.5
1
9
14
20
2.4.2 浮點(diǎn)數(shù)
Python將帶小數(shù)點(diǎn)的數(shù)字都稱為浮點(diǎn)數(shù)。小數(shù)點(diǎn)可出現(xiàn)在數(shù)字的任何位置。
print(0.1 + 0.1)
print(0.2 + 0.2)
print(2 * 0.1)
print(2 * 0.2)
print(0.2 + 0.1)
print(3 * 0.1)
0.2
0.4
0.2
0.4
0.30000000000000004
0.30000000000000004
上面最后兩行的語句在所有語言都存在這種問題,沒有什么可擔(dān)心的。Python會盡力找到一種方式,以盡可能精確地表示結(jié)果,但鑒于計算機(jī)內(nèi)部表示數(shù)字的方式,這在有些情況下很難。就現(xiàn)在而言,暫時忽略多余的小數(shù)位數(shù)即可
2.4.3 使用函數(shù)str() 避免類型錯誤
age = 38
message = "Happy " + age + "rd Birthday!"
print(message)
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
< ipython-input-16-a9d2b2541859 > in < module >()
1 age = 38
---- > 2 message = "Happy " + age + "rd Birthday!"
3
4 print(message)
TypeError: must be str, not int
age = 38
message = "Happy " + str(age) + "th Birthday!"
print(message)
Happy 38th Birthday!
age = 38
message = "Happy {}th Birthday!".format(age)
print(message)
Happy 38th Birthday!
2.4.4 Python 2中的整數(shù)
在Python 2中,若要避免商被取整,務(wù)必確保至少有一個操作數(shù)為浮點(diǎn)數(shù),這樣結(jié)果也將為浮點(diǎn)數(shù)。
2.5 注釋
注釋
讓你能夠使用自然語言在程序中添加說明。
2.5.1 如何編寫注釋
在Python中,注釋用井號(#)標(biāo)識。#號后面的內(nèi)容都會被Python解釋器忽略。具體可見上面代碼段中的#用法。
2.5.2 該編寫什么樣的注釋
編寫注釋的主要目的是闡述代碼要做什么,以及是如何做的。在開發(fā)項目期間,你對各個部分如何協(xié)同工作了如指掌,但過段時間后,有些細(xì)節(jié)你可能不記得了。當(dāng)然,你總是可以通過研究代碼來確定各個部分的工作原理,但通過編寫注釋,以清晰的自然語言對解決方案進(jìn)行概述,可節(jié)省很多時間。
要成為專業(yè)程序員或與其他程序員合作,就必須編寫有意義的注釋。當(dāng)前,大多數(shù)軟件都是合作編寫的,編寫者可能是同一家公司的多名員工,也可能是眾多致力于同一個開源項目的人員。訓(xùn)練有素的程序員都希望代碼中包含注釋,因此你最好從現(xiàn)在開始就在程序中添加描述性注釋。作為新手,最值得養(yǎng)成的習(xí)慣之一是,在代碼中編寫清晰、簡潔的注釋。
如果不確定是否要編寫注釋,就問問自己,找到合理的解決方案前,是否考慮了多個解決方案。如果答案是肯定的,就編寫注釋對你的解決方案進(jìn)行說明吧。相比回過頭去再添加注釋,刪除多余的注釋要容易得多。
2.6 Python之禪
import this
The Zen of Python, by Tim Peters
Beautiful is better than ugly.
Explicit is better than implicit.
Simple is better than complex.
Complex is better than complicated.
Flat is better than nested.
Sparse is better than dense.
Readability counts.
Special cases aren't special enough to break the rules.
Although practicality beats purity.
Errors should never pass silently.
Unless explicitly silenced.
In the face of ambiguity, refuse the temptation to guess.
There should be one-- and preferably only one --obvious way to do it.
Although that way may not be obvious at first unless you're Dutch.
Now is better than never.
Although never is often better than *right* now.
If the implementation is hard to explain, it's a bad idea.
If the implementation is easy to explain, it may be a good idea.
Namespaces are one honking great idea -- let's do more of those!
評論
查看更多