第二章 變量和簡單數據類型


2.1  變量

程序

    message = "Hello Python world"
print(message)
運行這個程序,輸出結果與以前相同
Hello Python world
在這里我們添加了一個名為message的變量。每個變量都存儲了一個值————與變量相關聯的信息。
添加變量導致Python解釋器需要做更多的工作。處理第1行代碼的時候,它將文本“Hello Python world”與變量message關聯起來;而處理第2行代碼時,它將與變量message關聯的值打印到屏幕。
下面來進一步擴展這個程序:修改hello_world.py,使其再打印一條消息。為此,在hello_world.py中添加一個空行,在添加下面兩行代碼:
hello_world.py
    message = "Hello Python world"
print(message)

message = "Hello Python Crash Course world!"
print(message)
現在運行這個程序,將看到兩行輸出:

    Hello Python world
    Hello Python Crash Course world!

在程序中可隨時修改變量的值,而Python將始終記錄變量的最新值。

2.2.1  變量的命名和使用

    在Python中使用變量時,需要遵守一些規則和指南。違反這些規則將引發錯誤,而指南旨在讓你編寫的代碼更容易閱讀和理解。請務必牢記下述有關變量的規則。

    (一)、變量名只能包含字母,數字和下划線。變量名可以字母或下划線打頭,但不能以數字打頭,例如,可將變量命名為message_1,但不能將其命名為1_message。

    (二)、變量名不能包含空格,但可以使用下划線來分隔其中的單詞。例如變量名greeting_message可行,但變量名greeting message會引發錯誤,這是因為,Python會將greeting message當成兩個詞,會在里面找這樣的語法是否正確,沒有這樣的語法表示就會報錯;而將greeting_message統一當成一個變量。

    (三)、不要講Python關鍵字和函數名用作變量名,即不要使用Python保留用於特殊用途的單詞,如print。

    (四)、變量名即應簡短又具有描述性。例如,name比n好,student_name比s_n好,name_length比;length_of_persons_name好。

    (五)、慎用小寫字母l和大寫字母O,因為它們可能被人錯看成數字1和0。

注意:在Python中應使用小寫的變量名。在變量名中使用大寫字母雖然不會導致錯誤,但避免使用大寫字母是個不錯的主意,而且大寫字母的單詞有其特殊用途,比如創建類的時候,要用大寫字母來打頭,比如class Nameusers,創建一個用戶類。

動手試一試

    請完成下面的練習,在做每個練習時,都編寫一個獨立的程序。保存每個程序時,使用符合標准的Python約定文件名:使用小寫字母和下划線,如simple_message.py和simple_messages.py。
2-1 簡單消息:將一條消息存儲到變量中,在將其打印出來。
2-2 多條簡單消息:將一條消息存儲到變量中,將其打印出來;在將變量的值修改作為一條新消息,並將其打印出來。
2-1
python.py
message = "I like python!"
print(message)

2-2
lucky_python.py
message = "I like python!"
print(message)

message = "I like python too!"
print(message)

message = "I really like python!"
print(message)

results:

I like python!

I like python too!

I really like python!\

2.2字符串
字符串就是一系列字符。在Python中,用引號括起來的都是字符串,其中的引號可以是單引號,也可以是雙引號,如下所示:
"This is a strint."
'This is also a string."
這種靈活性讓我們能夠在字符串中包含引號和撇號:
’I told my friend,"Python is my favorite language!"'
"The language 'python' is named after Monty Python, not the snake."

注意:在使用雙引號和撇號的過程中,一定要注意,不能出現""""或者"'"'等情況,一定要注意正確使用,因為兩個引號直接Python就會默認你已經輸入了一條完整的語句了。

2.2.1 使用方法修改字符串的大小寫
字符串的大小寫修改方法有三種方式,a.title(),a.upper()和 a.lower()
a.title():表示讓單詞首字母大寫;a.upper():表示讓單詞所有字母都大寫;a.lower()表示讓所有單詞字母都小寫,三種不同的方法針對不同的情況
name.py
name = "ada lovelace"
print(name.title())
results:
Ada Lovelace
在這個實例中,小寫的字符串"ada lovelace"存儲到了變量中。在print()語句中,方法title()出現在這個變量的后面。方法是Python可對數據進行的操作。在name.title()中,name后面的句點(.)讓Python對變量name執行方法title()制定的操作。每個方法后面都跟着一對括號,這是因為方法通常是需要額外的信息來完成其工作。這種信息是在括號內提供的。函數title()不需要額外的信息,因此它后面的括號是空的。
title()以首字母大寫的方式顯示每個單詞,即將每個單詞的首字母都改為大寫。這很有用,因為你經常需要將名字視為信息。例如,你可能希望程序將值Ada,ADA和ada視為同一個名字,並將它們都顯示為Ada。
還有其他兩種方式,全部轉化為大寫,全部轉化為小寫的方式如下:
print(name.upper())
print(name.lower())

results:
print(name.upper())
print(name.lower())
存儲數據時,方法lower()很有用。很多時候,你無法依靠用戶來提供正確的大小寫,因此需要講字符串先轉化為小寫,再存儲它們。以后需要顯示這些信息時,在將其轉換為最合適的大小寫方式。
這種情況在我們輸入網站驗證碼的時候很有用,我們在注冊一個新的網站的時候也經常遇到這樣的問題,網站要求我們輸入驗證碼,但是無論我們輸入的是大寫的還是小寫的都沒有關系。
假如:網站后台提供了隨機的驗證碼,有大寫有小寫,里面肯定存在這轉換機制,將我們輸入的驗證碼轉換為統一的格式在跟后台生成的驗證碼進行比較,比如:
#網站隨機生成的驗證碼,有大寫還有小寫
site_verification_code = "ABadf"
#輸入用戶看到的驗證碼,用戶可以隨便輸入,不管大小寫都沒有關系
user_verification_code = input("Please enter the verification code: ")

if user_verification_code.lower() == site_verification_code.lower():
#如果用戶輸入的驗證碼(轉換為小寫格式)跟網站隨機生成的驗證碼是一致的,那么用戶就可以進入網站,否則就需要重新輸入
print("Welcome to Baidu.")
else:
print("The code you entered is incorrect, please re-enter: ")
results:

Please enter the verification code: abadf
Welcome to Baidu.
我們輸入abadf或者abADf,只要是跟網站隨機生成的驗證碼一致,最后都會進入到網站里面,這就與驗證碼的驗證機制類似;
假如我們輸入了錯誤的驗證碼,比如acadf,看結果是怎樣的如下:
results:
Please enter the verification code: acadf
The code you entered is incorrect, please re-enter:
這個時候程序運行結果提示我們,我們輸入的驗證碼是錯誤的,需要我們重新輸入,當然這個程序沒有加入循環語句,這個是可以添加循環的,可以是無限循環,也可以設置輸入多少次,編程就是對現實世界的描述,在編程中體現它。

2.2.2 合並(拼接)字符串
在很多情況下,都需要合並字符串。例如,我們可能將姓和名存儲在不同的變量中,等要顯示姓名時,再將它們合二為一:
full_name.py
first_name = "ada"
last_name = "lovelace"
full_name = first_name + " " + last_name
print(full_name.title())

results:

Ada Lovelace
Python使用加號(+)來合並字符串。在這個實例中,我們使用+來合並first_name、空格和last_name,以得到完整的姓名,在Python中,編程是可以美麗的,讓程序看起來整潔漂亮,所以需要時刻修飾代碼,讓代碼看起來整潔美觀。
比如添加一些空格、換行符、特殊符號(-," "等),制表符等,讓代碼看起來整齊有序,讓人有一種享受感,耳目一新。

2.2.3 使用制表符或換行符來添加空白
在編程中,空白泛指任何非打印字符,如空格、制表符和換行符。我們可以只用空白來組織輸出,以使代碼更易讀,而且美觀有序。
要在字符串中添加制表符,可使用字符組合\t;要在字符串中添加換行符,可使用字符組合\n:
print("Languages:\n\tPython\n\tC\n\tJavaScript")

results:
Languages:
    Python
    C
    JavaScript
換行符和制表符可以組合使用,可以讓結果美觀,在編程的過程中,不僅要得到結果,也要盡可能讓結果看起來更整齊漂亮。

2.2.4 刪除空白
在程序中,額外的空白可能令人迷惑。如"python"和"python "看起來幾乎沒有什么兩樣,但是對程序來說,它們是兩個不同的字符串,Python能夠發現"python "中的額外空白,並認為它們是有意義的--除非你告訴它不是這樣的。
Python能夠找出字符串開頭和末尾多余的空白。要確保字符串末尾沒有空白,可使用方法rstrip()
favorite_language.py
favorite_language = "python "
print(favorite_language,"Character length :" + str(len(favorite_language)))
print(favorite_language.rstrip(),"Character length: " + str(len(favorite_language.rstrip())))
results:
python  Character length :7
python Character length: 6
在上面程序中,我們對程序進行了處理,輸出了原始程序以及長度,還有剔除空格后的長度,可以看出,在Python中,加空格和不加空格是不一樣的,必要的時候要剔除多余的空格。
提出空格有三種方法,rstrip()、lstrip()和strip()。
單詞strip的含義是:除去,剝去;剝奪;刪除;清除,拆除,在Python中主要是刪除空格,rstrip()是刪除單詞右邊的空格,lstrip()是left+strip的縮寫,意思是刪除單詞左邊的空格,制霸單詞strip()是刪除單詞兩側的空格;
學過excel函數的應該知道,excel函數trim()也是為了刪除空格的,但是它能刪除單詞中間的空格,在Python中strip()方法是不可以的,只能刪除兩側的空格:
比如:在excel中,trim(" I love Python ") = "I love Python",但是在Python中,使用strip()方法,得到的結果是:"I love Python"是無法刪除字符串中間的字符的。
然而,這種刪除只是暫時的,並沒有真正的從favorite_language中刪除右邊的空格,只是在輸出結果的時候我們得到了我們想要看到的結果。
要永久刪除這個字符串中的空白,必須將刪除操作的結果存回到變量中:
favorite_language = favorite_language.rstrip()
為刪除這個字符串中的空白,需要將其末尾的空白刪除,在將結果存回到原來的變量中。在編程中,經常需要修改變量的值,在將新值存回到原來的變量中。這就是變量的值可能隨程序的運行或用戶的輸入數據而發生變化的原因。

2.2.4 使用字符串時避免語法錯誤
Python對輸入的單詞很嚴格,大小寫,字符格式等都要嚴格終於,有一個地方出錯系統就會報錯,我也經常遇到這樣的問題,比如字符串和數字拼接,經常會忘記把數字轉化為字符串,這樣系統就會報錯。


動手試一試:

2-3 個性化消息 講用戶的姓名存儲到一個變量中,並向該用戶顯示出一條消息。顯示的消息非常簡單,如"Hello Eric, would like to learn Some Python today?"
2-4 調整名字的大小寫

 



 

 

 

 

 

 

 

 

 

 

 

 

 

 

name = "Eric"
print("Hello " + name + ', would like to learn some Python today?')

首先我們創建一個姓名叫做"Eric"的家伙,然后輸出一條語句,注意,要做好分段,比如"Hello "是一段,name是變量,', would like to learn some Python today?'也是一段要輸出的字符,單引號,雙引號都可以使用,但是一定要注意,不能在一個字段中同時使用。


2.2.5 主要考察我們title(),upper(),lower()的使用
my_name = "Alex is sb."
print(my_name)
print(my_name.title())
print(my_name.upper())
print(my_name.lower())
results:
Alex is sb.
Alex Is Sb.
ALEX IS SB.
alex is sb.
首先我們定義了一個姓名,"Alex is sb.",然后首先不加任何方法輸出,接着使用title()首字母大寫,upper()全部大寫,lower()全部小寫的方式進行輸出。這幾種方法用的多的是在規范操作上,要統一格式。

2.2.6 主要考察我們單引號和雙引號的使用
print('Lu Sun once said, "Time is like a sponge in the water, as long as the original squeeze, there are always some"'
)

比如,我們輸出結果中要包含雙引號,那么我們括號引用的時候就要使用單引號,這樣python就能把整段當成一句話,避免錯誤。

2.2.7 只要是練習存儲變量,如果要輸入多個名人,可以使用函數來循環顯示,不過名人的名言不一樣,就需要定義兩個參數
famous_person = "Lu Sun"
message = famous_person + ' once said, "Time is like a sponge in the water, as long as the original squeeze, there are always some."'
print(message
)
results:
Lu Sun once said, "Time is like a sponge in the water, as long as the original squeeze, there are always some."

2.2.7 主要聯系"\n"和"\t"還有rstrip(),lstrip()和strip()
my_name = " Sora Aoi "
print(my_name)
#在名字前面添加制表符,驗證strip是否能夠刪除制表符,因為都是刪除的空格,可以自己嘗試一下
user_name ="\t" + my_name
"""驗證strip是否能夠刪除空行"""
your_name = "\n" + my_name
print(user_name)
print(your_name)

print(user_name.strip())
print(your_name.strip())
results:
     Sora Aoi    
         Sora Aoi    

     Sora Aoi    
Sora Aoi
Sora Aoi
從輸出結果可以看出,最后兩條記錄,結果都不包含制表符和空行了,所記錄中能夠看出,strip不僅僅是對空單元有用;可以自己嘗試一下在名字中間加上空行是否能夠刪除,我自己嘗試了,如果名字中間包含制表符或者空行是刪除不了的,strip只能夠對單詞兩邊的空白起作用。

2.3 數字
在編程中,經常使用數字來記錄游戲得分、表示可視化數據、存儲Web應用信息等。Python根據數字的用法以不同的方式處理它們。鑒於整數使用起來最簡單,下面就看Python是如何管理它們的。

2.3.1 整數
在Python中,可對整數執行加(+)、減(-)、乘(*)、除(/)、乘方(**)、求余(%)運算。
>>> 2+3
5
>>> 3-2
1
>>> 2**2
4
>>> 3/2
1.5
>>> 4.0/2
2.0
>>> 4.00/2
2.0
>>> 4/2.00
2.0
>>> 10**6
1000000
>>> 5%2
1
運算是有優先級的,但是在實際運算過程中我們不必過分關心它,因為我們可以使用括號()來改變運算的優先級,讓它按照我們的方法來執行運算的次序。

2.3.2 浮點數
Python將帶小數點的數字都稱為浮點數。大多數編程語言都使用了這個術語,它指出了這樣一個事實:小數點可出現在數字的任何位置。每種編程語言都
須細心設計,以妥善地處理浮點數,確保不管小數點出現在什么位置,數字的行為都是正常的。
從很大程度上說,使用浮點數時都無需考慮其行為。只需輸入要使用的數字,Python通常都會按照我們期望的方式處理它們。
>>> 0.1+0.1
0.2
>>> 0.2+0.2
0.4
>>> 2*0.1
0.2
>>> 2*0.2
0.4
但需要注意的是,結果包含的小數位數可能是不確定的:
>>> 0.2+0.1
0.30000000000000004
>>> 3*0.1
0.30000000000000004
>>> 0.1**2
0.010000000000000002
所有語言都存在這種問題,沒有什么可擔心的。Python會盡力找到一種方式,以盡可能精確地表示結果,但鑒於計算機內部的數字的方式,這在有些情況下很難
。就現在而言,暫時忽略多余的小數點即可。

2.3.3 使用函數str()避免類型錯誤
我們經常需要在消息中使用變量的值。例如,假如要祝某人生日快樂,可能會在中間加入年齡,例如祝某人多少歲生日快樂
birthday.py
age = 23
message = "Happy " + age + "rd Brithday"
print(message)
這樣運行如下:
Traceback (most recent call last):
  File "/home/zhuzhu/title2/name.py", line 2, in <module>
    message = "Happy " + age + "rd Brithday"
TypeError: Can't convert 'int' object to str implicitly

運行提示,int數字類型不能跟str字符型的進行合並(拼接),要想實現字符串的與數字之間的拼接功能,一定要把數值轉換為字符串,這個錯誤說實話我也經常犯,
希望大家共勉,這個點一定要注意,有數字的時候一定要轉化為字符串才能夠合並拼接。

2-9 最喜歡的數字 將你最喜歡的數字存儲在一個變量中,再使用這個變量創建一條消息,支出你最喜歡的數字,然后將這條消息打印出來。
分析:其實這道題主要是考察我們是否記得在數字和字符串相加的時候把數字轉化為字符串,一定要記得進行轉換,不然會報錯,跟上面一樣,所以首先我們定義了
一個數字,做為我們的行為數字,然后打印一句話,我們的幸運數字是6,只是記得在字符串跟數字拼接的過程中一定要把數字轉化為字符串。
lucky_num = 6
message = "My lucky num is " + str(lucky_num) + "."
print(message)
results:
My lucky num is 6.

2.4 注釋
在大多數編程語言中,注釋都是一項很有用的功能。本書前面編寫的程序中都只包含Python代碼,但隨着程序越來越大、越來越復雜,就應在其中添加說明
,對我們解決問題的方法進行大致的闡述。 注釋讓你能夠使用自然語言在程序中添加說明。

2.4.2 該編寫什么樣的注釋
編寫注釋的主要目的是闡述代碼要做什么,以及是如何做的。在開發項目期間,你對各個部分如何協同工作了如指掌,但過段時間后,有些細節你可能不記得了。
當然,你總是可以通過研究代碼來確定各個部門的工作原理,但通過編寫注釋,以清晰的自然語言對解決方案進行概述,可節省很多時間。
要成為專業的程序員或與其他程序員合作,就必須編寫有意義的注釋。當前,大多數軟件都是合作編寫的,編寫者可能是同一家公司的多名員工,也可能是眾多
致力於同一個開源項目的人員。訓練有素的程序員都希望代碼中包含注釋,因此我們最好從現在開始就在程序中添加描述性注釋。作為新手,最值得養成的習慣之一是
,在代碼中編寫清晰、簡潔的注釋。
如果不確定是否要編寫注釋,就問問自己,找到合理的解決方案前,是否考慮了多個解決方案。如果答案是肯定的,就編寫注釋對你的解決方案進行說明吧。相比回過頭
再添加注釋,刪除多余的注釋要容易的多。所以從現在開始,要養成良好的添加注釋的習慣。

2.5 Python之禪
編程語言Perl曾在互聯網領域長期占據着統治地位,早期的大多數交互式網站使用的都是Perl腳本。彼時,“解決問題的辦法有多個”被Perl社區奉為座右銘。
這種理念一度深受大家的喜歡,因為這種語言固有的靈活性使得大多數問題都有很多不同的解決之道。在開發項目期間,這種靈活性是可以接受的,但大家最終認識到,
過於強調靈活性會導致大型項目難以維護:要通過研究代碼搞清楚當時解決復雜問題的人是怎么想的,既困難又麻煩,還會耗費大量的時間。
經驗豐富的程序員倡導盡可能避繁就簡,Python社區的理念都包含在Tim Peters編寫的“Python之禪”中。要獲悉這些有關編寫優秀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!

Beautiful is better than ugly.
Python程序員篤信代碼可以編寫的漂亮而優雅。編程是要解決問題的,設計良好、高效而漂亮的解決方案都會讓程序員心生敬意。隨着對Python的認識越來
越深入,並使用它來編寫越來越多的代碼,有一天也許會有人站在你后面驚呼:“哇,代碼編寫的真是偏亮!”

Simple is better than complex.
如果有兩個解決方案,一個簡單,一個復雜,但都行之有效,就選擇簡單的解決方案吧。這樣,你編寫的代碼將更容易維護,你或他人以后改進這些代碼時也會
更容易。
Complex is better than complicated.
現實是復雜的,有時候可能沒有簡單的解決方案。這種情況下,就選擇最簡單可行的解決方案吧。
Readability counts.
即便是復雜的代碼,也要讓它易於理解。開發的項目涉及復雜代碼時,一定要為這些代碼編寫有益的注釋。
There should be one -- and preferably only one --obvious way to do it.
如果讓兩名Python程序員去解決同一個問題,他們提供的解決方案應大致相同。這並不是說編程沒有創意空間,而是恰恰相反!然而,大部分編程工作都是
使用常見解決方案來解決簡單的小問題,但這些小問題都包含在更龐大、更有創意空間的項目中。在你的程序中,各種具體細節對Python程序員來說都應易於理解。



 
 





 
 

 













 

 
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM