每個人都能學(xué)的Python(03)-變量和類型

變量的定義

上次我們簡單說明了變量的含義,還提到了x'x'不同之處,帶引號的是字符串,不帶引號的是一個你自己定義的標識符,表示一個對象的名稱。這里,x是一個“變量”名。

變量可以存儲各種各樣的東西,可以存儲字符串,也可以存儲數(shù)字等很多種類的對象,編程語言最強大的功能之一是操縱變量的能力。


我們現(xiàn)在打開Python交互環(huán)境,嘗試用print函數(shù)輸出一個變量:

$ python
Python 3.7.1 (default, Nov  6 2018, 18:45:35) 
[Clang 10.0.0 (clang-1000.11.45.5)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> print(x)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'x' is not defined
>>> 

顯然,這里出問題了。在輸出的最后一行Python解釋器給出了提示:NameError: name 'x' is not defined 。這里是說出現(xiàn)了一個名稱錯誤,x沒有被定義。這是因為你想用x作為你自己定義的一個變量名,可是你又沒告訴python這個x是個什么東西,解釋器迷惑不解。

在python中“變量”需要被定義,也就是definde后才能使用,定義后解釋器才會根據(jù)變量的類型在內(nèi)存中開辟一塊合適大小的地方來存放它,你提供的變量名就成為這塊地方的一個標識符,拿出這個名字就代表你要使用這塊內(nèi)存了。根據(jù)不同的值類型需要不同的內(nèi)存大小,所以變量需要區(qū)分類型才能精確的分配內(nèi)存。

說到這里你可能覺得在python里定義一個變量是一個很麻煩的事情,其實非常簡單,我們在第一節(jié)課就說過python是一種動態(tài)類型的語言,所謂動態(tài)類型就是:你不需要用一句話來告訴解釋器你要用的這個變量是什么類型,確定一個變量的類型是在第一次給它賦值的時候。這樣就簡單很多啦,下面我們來試試利用上次我們說到的賦值操作符=來給變量一個值,然后看看它們被定義成了什么類型:

>>> message = 'hello world!'
>>> x = 256
>>> pi = 3.1415926

我們可以用內(nèi)置函數(shù)type()來觀察一下這些變量被定義成了什么類型:

>>> type(message)
<class 'str'>
>>> type(x)
<class 'int'>
>>> type(pi)
<class 'float'>

根據(jù)輸出的內(nèi)容我們知道這三個類型分別是:

  • message:str,字符串類型
  • x:int,整數(shù)類型
  • pi:float,浮點數(shù)類型

細心的朋友肯定發(fā)現(xiàn)了在type輸出信息里都有個單詞class(類的意思),這里表示它輸出的這些strint,float都是一個對象,舉個對照現(xiàn)實中例子就很容易理解了,我們所說的人類就是一個現(xiàn)實世界的“類”,你,我,他,我們每個人都是人類的一個個“實例”對象,我們共有人類的一些基本特性,雙足行走,雜食性,胎生等等。同樣在python世界也有很多“類”,這里message就是str類的一個實例。這種特性就是我們說過的,python是一門面向?qū)ο?/code>的編程語言,其實在python中所有的東西都是對象,都有他們自己的類。關(guān)于面向?qū)ο蟮脑掝}在后面章節(jié)還會詳細敘述,這里只要了解一下概念即可。

變量的名稱

變量的命名比較自由,但也是需要遵循一些規(guī)則的:

  1. 不能使用保留字,在python3.7中一共有35個
1 2 3 4 5
False None True and as
assert async await break class
continue def del elif else
except finally for from global
if import in is lambda
nonlocal not or pass raise
return try while with yiel
  1. 只能由字母、下劃線和數(shù)字組成,而不能使用空格、連字符、標點符號、引號或其他字符
  2. 不能以數(shù)字開頭
  3. 變量名區(qū)分大小寫
>>> 7day = 'week'
  File "<stdin>", line 1
    7day = 'week'
       ^
SyntaxError: invalid syntax
>>> mail@ = '123@qq.com'
  File "<stdin>", line 1
    mail@ = '123@qq.com'
          ^
SyntaxError: invalid syntax
>>> class = 'human'
  File "<stdin>", line 1
    class = 'human'
          ^
SyntaxError: invalid syntax

思考下上面定義變量時為什么出現(xiàn)各種錯誤。

獲得用戶輸入的變量

我們之前獲得的變量都是在程序中直接賦值的:pi = 3.14,如果我們需要在程序運行的時候動態(tài)的獲得用戶輸入的變量怎么辦呢,我們可以使用input()函數(shù),這個函數(shù)既可以把括號中的參數(shù)作為顯示提示,還可以讓程序暫停,等待獲得用戶的輸入來給變量賦值。
還記得我們第一次計算圓形面積的程序嗎?我們來改造一下用來獲取用戶輸入。在文本編輯器里編輯area.py:

r = input('請輸入半徑長度:')
pi = 3.14
area = pi * r**2
print('面積為{}'.format(area))

這里的半徑r不再是一個固定值,而是一個函數(shù)input()處理后的結(jié)果,這里的結(jié)果就是用戶在命令行輸入的數(shù)字,在提示文字后輸入然后按回車后r就得到了輸入的值。我們來運行一下。

$ python area.py
請輸入半徑長度:10
Traceback (most recent call last):
  File "area.py", line 3, in <module>
    area = pi * r**2
TypeError: unsupported operand type(s) for ** or pow(): 'str' and 'int'

這里在輸入半徑10后按回車,出現(xiàn)了一個初學(xué)者常見的一種錯誤:類型錯誤,提示是說字符串類型不支持次方運算的操作。這是因為input函數(shù)把用戶輸入的值都作為字符串來賦值給變量,變量就被定義成了字符串類型,而字符串不能做次方運算,也不可以和數(shù)字類型一起做任何數(shù)學(xué)運算。這就是我們曾經(jīng)提到的,python是一種強類型語言。
顯然這里需要先把輸入的字符串轉(zhuǎn)成數(shù)字,然后再參與運算。我們需要再增加一步操作,利用int()函數(shù)強制轉(zhuǎn)換類型。int函數(shù)把括號中的字符串轉(zhuǎn)換為整型數(shù)字。

注意
int函數(shù)的參數(shù)需要是可以轉(zhuǎn)為整數(shù)型的字符串才能正常工作,如果是'123 321'或是'hello‘這種給int函數(shù)處理就會引起一個值錯誤。

繼續(xù)修改我們的程序:

str_r = input('請輸入半徑長度:')
int_r = int(str_r)
pi = 3.14
area = pi * int_r**2
print('面積為{}'.format(area))

命令行執(zhí)行:

$ python area.py
請輸入半徑長度:10
面積為314.0

練習(xí)

編寫一個程序,提示用戶輸入攝氏溫度,將溫度轉(zhuǎn)換為華氏溫度,然后打印出轉(zhuǎn)換后的溫度。攝氏度轉(zhuǎn)華氏度的公式是oF = ℃ × 1.8 + 32。下一次課將會給出一個參考答案。

本系列尚未完成,將持續(xù)更新,請關(guān)注我的簡書號。
最新STEM知識分享請關(guān)注STEM實驗室 :www.steamlab.club

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容