python 之語言元素

指令和程序

計算機(jī)的硬件系統(tǒng)通常由五大部件構(gòu)成,包括:運(yùn)算器、控制器、存儲器、輸入設(shè)備和輸出設(shè)備。其中,運(yùn)算器和控制器放在一起就是我們通常所說的中央處理器,它的功能是執(zhí)行各種運(yùn)算和控制指令以及處理計算機(jī)軟件中的數(shù)據(jù)。我們通常所說的程序?qū)嶋H上就是指令的集合,我們程序就是將一系列的指令按照某種方式組織到一起,然后通過這些指令去控制計算機(jī)做我們想讓它做的事情。今天我們大多數(shù)時候使用的計算機(jī),雖然它們的元器件做工越來越精密,處理能力越來越強(qiáng)大,但究其本質(zhì)來說仍然屬于“馮·諾依曼結(jié)構(gòu)”的計算機(jī)?!榜T·諾依曼結(jié)構(gòu)”有兩個關(guān)鍵點(diǎn),一是指出要將存儲設(shè)備與中央處理器分開,二是提出了將數(shù)據(jù)以二進(jìn)制方式編碼。二進(jìn)制是一種“逢二進(jìn)一”的計數(shù)法,跟我們?nèi)祟愂褂玫摹胺晔M(jìn)一”的計數(shù)法沒有實質(zhì)性的區(qū)別,人類因為有十根手指所以使用了十進(jìn)制(因為在數(shù)數(shù)時十根手指用完之后就只能進(jìn)位了,當(dāng)然凡事都有例外,瑪雅人可能是因為長年光著腳的原因把腳趾頭也算上了,于是他們使用了二十進(jìn)制的計數(shù)法,在這種計數(shù)法的指導(dǎo)下瑪雅人的歷法就與我們平常使用的歷法不一樣,而按照瑪雅人的歷法,2012年是上一個所謂的“太陽紀(jì)”的最后一年,而2013年則是新的“太陽紀(jì)”的開始,后來這件事情被以訛傳訛的方式誤傳為”2012年是瑪雅人預(yù)言的世界末日“這種荒誕的說法,今天我們可以大膽的猜測,瑪雅文明之所以發(fā)展緩慢估計也與使用了二十進(jìn)制有關(guān))。對于計算機(jī)來說,二進(jìn)制在物理器件上來說是最容易實現(xiàn)的(高電壓表示1,低電壓表示0),于是在“馮·諾依曼結(jié)構(gòu)”的計算機(jī)都使用了二進(jìn)制。雖然我們并不需要每個程序員都能夠使用二進(jìn)制的思維方式來工作,但是了解二進(jìn)制以及它與我們生活中的十進(jìn)制之間的轉(zhuǎn)換關(guān)系,以及二進(jìn)制與八進(jìn)制和十六進(jìn)制的轉(zhuǎn)換關(guān)系還是有必要的。如果你對這一點(diǎn)不熟悉,可以自行使用維基百科或者百度百科科普一下。

提示:近期關(guān)于量子計算機(jī)的研究已經(jīng)被推倒了風(fēng)口浪尖,量子計算機(jī)基于量子力學(xué)進(jìn)行運(yùn)算,使用量子瞬移的方式來傳遞信息。2018年6月,Intel宣布開發(fā)出新款量子芯片并通過了在接近絕對零度環(huán)境下的測試;2019年1月,IBM向全世界發(fā)布了首款商業(yè)化量子計算機(jī)。

變量和類型

在程序設(shè)計中,變量是一種存儲數(shù)據(jù)的載體。計算機(jī)中的變量是實際存在的數(shù)據(jù)或者說是存儲器中存儲數(shù)據(jù)的一塊內(nèi)存空間,變量的值可以被讀取和修改,這是所有計算和控制的基礎(chǔ)。計算機(jī)能處理的數(shù)據(jù)有很多種類型,除了數(shù)值之外還可以處理文本、圖形、音頻、視頻等各種各樣的數(shù)據(jù),那么不同的數(shù)據(jù)就需要定義不同的存儲類型。Python中的數(shù)據(jù)類型很多,而且也允許我們自定義新的數(shù)據(jù)類型(這一點(diǎn)在后面會講到),我們先介紹幾種常用的數(shù)據(jù)類型。

  • 整型:Python中可以處理任意大小的整數(shù)(Python 2.x中有int和long兩種類型的整數(shù),但這種區(qū)分對Python來說意義不大,因此在Python 3.x中整數(shù)只有int這一種了),而且支持二進(jìn)制(如0b100,換算成十進(jìn)制是4)、八進(jìn)制(如0o100,換算成十進(jìn)制是64)、十進(jìn)制(100)和十六進(jìn)制(0x100,換算成十進(jìn)制是256)的表示法。
  • 浮點(diǎn)型:浮點(diǎn)數(shù)也就是小數(shù),之所以稱為浮點(diǎn)數(shù),是因為按照科學(xué)記數(shù)法表示時,一個浮點(diǎn)數(shù)的小數(shù)點(diǎn)位置是可變的,浮點(diǎn)數(shù)除了數(shù)學(xué)寫法(如123.456)之外還支持科學(xué)計數(shù)法(如1.23456e2)。
  • 字符串型:字符串是以單引號或雙引號括起來的任意文本,比如'hello'"hello",字符串還有原始字符串表示法、字節(jié)字符串表示法、Unicode字符串表示法,而且可以書寫成多行的形式(用三個單引號或三個雙引號開頭,三個單引號或三個雙引號結(jié)尾)。
  • 布爾型:布爾值只有True、False兩種值,要么是True,要么是False,在Python中,可以直接用TrueFalse表示布爾值(請注意大小寫),也可以通過布爾運(yùn)算計算出來(例如3 < 5會產(chǎn)生布爾值True,而2 == 1會產(chǎn)生布爾值False)。
  • 復(fù)數(shù)型:形如3+5j,跟數(shù)學(xué)上的復(fù)數(shù)表示一樣,唯一不同的是虛部的i換成了j。實際上,這個類型并不能算作常用類型,大家了解下就可以了。

變量命名

對于每個變量我們需要給它取一個名字,就如同我們每個人都有屬于自己的響亮的名字一樣。在Python中,變量命名需要遵循以下這些必須遵守硬性規(guī)則和強(qiáng)烈建議遵守的非硬性規(guī)則。

  • 硬性規(guī)則:
    • 變量名由字母(廣義的Unicode字符,不包括特殊字符)、數(shù)字和下劃線構(gòu)成,數(shù)字不能開頭。
    • 大小寫敏感(大寫的a和小寫的A是兩個不同的變量)。
    • 不要跟關(guān)鍵字(有特殊含義的單詞,后面會講到)和系統(tǒng)保留字(如函數(shù)、模塊等的名字)沖突。
  • PEP 8要求:
    • 用小寫字母拼寫,多個單詞用下劃線連接。
    • 受保護(hù)的實例屬性用單個下劃線開頭(后面會講到)。
    • 私有的實例屬性用兩個下劃線開頭(后面會講到)。

當(dāng)然,作為一個專業(yè)的程序員,給變量(事實上應(yīng)該是所有的標(biāo)識符)命名時做到見名知意也是非常重要的。

變量的使用

下面通過幾個例子來說明變量的類型和變量使用。

"""
使用變量保存數(shù)據(jù)并進(jìn)行算術(shù)運(yùn)算

Version: 0.1
Author: fby
"""

a = 321
b = 123
print(a + b)
print(a - b)
print(a * b)
print(a / b)
print(a // b)
print(a % b)
print(a ** b)

在Python中可以使用type函數(shù)對變量的類型進(jìn)行檢查。程序設(shè)計中函數(shù)的概念跟數(shù)學(xué)上函數(shù)的概念是一致的,數(shù)學(xué)上的函數(shù)相信大家并不陌生,它包括了函數(shù)名、自變量和因變量。如果暫時不理解這個概念也不要緊,我們會在后續(xù)的章節(jié)中專門講解函數(shù)的定義和使用。

"""
使用type()檢查變量的類型

Version: 0.1
Author: fby
Date: 2018-02-27
"""

a = 100
b = 12.345
c = 1 + 5j
d = 'hello, world'
e = True
print(type(a)) # <class 'int'>
print(type(b)) # <class 'float'>
print(type(c)) # <class 'complex'>
print(type(d)) # <class 'str'>
print(type(e)) # <class 'bool'>

可以使用Python中內(nèi)置的函數(shù)對變量類型進(jìn)行轉(zhuǎn)換。

  • int():將一個數(shù)值或字符串轉(zhuǎn)換成整數(shù),可以指定進(jìn)制。
  • float():將一個字符串轉(zhuǎn)換成浮點(diǎn)數(shù)。
  • str():將指定的對象轉(zhuǎn)換成字符串形式,可以指定編碼。
  • chr():將整數(shù)轉(zhuǎn)換成該編碼對應(yīng)的字符串(一個字符)。
  • ord():將字符串(一個字符)轉(zhuǎn)換成對應(yīng)的編碼(整數(shù))。

下面的代碼通過鍵盤輸入兩個整數(shù)來實現(xiàn)對兩個整數(shù)的算術(shù)運(yùn)算。

"""
使用input()函數(shù)獲取鍵盤輸入(字符串)
使用int()函數(shù)將輸入的字符串轉(zhuǎn)換成整數(shù)
使用print()函數(shù)輸出帶占位符的字符串

Version: 0.1
Author: fby
"""

a = int(input('a = '))
b = int(input('b = '))
print('%d + %d = %d' % (a, b, a + b))
print('%d - %d = %d' % (a, b, a - b))
print('%d * %d = %d' % (a, b, a * b))
print('%d / %d = %f' % (a, b, a / b))
print('%d // %d = %d' % (a, b, a // b))
print('%d %% %d = %d' % (a, b, a % b))
print('%d ** %d = %d' % (a, b, a ** b))

說明:上面的print函數(shù)中輸出的字符串使用了占位符語法,其中%d是整數(shù)的占位符,%f是小數(shù)的占位符,%%表示百分號(因為百分號代表了占位符,所以帶占位符的字符串中要表示百分號必須寫成%%),字符串之后的%后面跟的變量值會替換掉占位符然后輸出到終端中,運(yùn)行上面的程序,看看程序執(zhí)行結(jié)果就明白啦。

運(yùn)算符

Python支持多種運(yùn)算符,下表大致按照優(yōu)先級從高到低的順序列出了所有的運(yùn)算符,運(yùn)算符的優(yōu)先級指的是多個運(yùn)算符同時出現(xiàn)時,先做什么運(yùn)算然后再做什么運(yùn)算。除了我們之前已經(jīng)用過的賦值運(yùn)算符和算術(shù)運(yùn)算符,我們稍后會陸續(xù)講到其他運(yùn)算符的使用。

運(yùn)算符 描述
[] [:] 下標(biāo),切片
** 指數(shù)
~ + - 按位取反, 正負(fù)號
* / % // 乘,除,模,整除
+ - 加,減
>> << 右移,左移
& 按位與
^ | 按位異或,按位或
<= < > >= 小于等于,小于,大于,大于等于
== != 等于,不等于
is is not 身份運(yùn)算符
in not in 成員運(yùn)算符
not or and 邏輯運(yùn)算符
= += -= *= /= %= //= **= &= ` =^=>>=<<=` (復(fù)合)賦值運(yùn)算符

說明: 在實際開發(fā)中,如果搞不清楚運(yùn)算符的優(yōu)先級,可以使用括號來確保運(yùn)算的執(zhí)行順序。

下面的例子演示了賦值運(yùn)算符和復(fù)合賦值運(yùn)算符的使用。

"""
賦值運(yùn)算符和復(fù)合賦值運(yùn)算符

Version: 0.1
Author: fby
"""

a = 10
b = 3
a += b # 相當(dāng)于:a = a + b
a *= a + 2 # 相當(dāng)于:a = a * (a + 2)
print(a) # 想想這里會輸出什么

下面的例子演示了比較運(yùn)算符(關(guān)系運(yùn)算符)、邏輯運(yùn)算符和身份運(yùn)算符的使用。

"""
比較、邏輯和算身份運(yùn)算符的使用

Version: 0.1
Author: fby
"""

flag0 = 1 == 1
flag1 = 3 > 2
flag2 = 2 < 1
flag3 = flag1 and flag2
flag4 = flag1 or flag2
flag5 = not (1 != 2)
print('flag0 =', flag0) # flag0 = True
print('flag1 =', flag1) # flag1 = True
print('flag2 =', flag2) # flag2 = False
print('flag3 =', flag3) # flag3 = False
print('flag4 =', flag4) # flag4 = True
print('flag5 =', flag5) # flag5 = False
print(flag1 is True) # True
print(flag2 is not False) # False

練習(xí)

練習(xí)1:華氏溫度轉(zhuǎn)換為攝氏溫度。

提示:華氏溫度到攝氏溫度的轉(zhuǎn)換公式為:C=(F - 32) \div 1.8。

參考答案:

"""
將華氏溫度轉(zhuǎn)換為攝氏溫度

Version: 0.1
Author: fby
"""

f = float(input('請輸入華氏溫度: '))
c = (f - 32) / 1.8
print('%.1f華氏度 = %.1f攝氏度' % (f, c))

練習(xí)2:輸入圓的半徑計算計算周長和面積。

參考答案:

"""
輸入半徑計算圓的周長和面積

Version: 0.1
Author: fby
"""

import math

radius = float(input('請輸入圓的半徑: '))
perimeter = 2 * math.pi * radius
area = math.pi * radius * radius
print('周長: %.2f' % perimeter)
print('面積: %.2f' % area)

練習(xí)3:輸入年份判斷是不是閏年。

參考答案:

"""
輸入年份 如果是閏年輸出True 否則輸出False

Version: 0.1
Author: fby
"""

year = int(input('請輸入年份: '))
# 如果代碼太長寫成一行不便于閱讀 可以使用\對代碼進(jìn)行折行
is_leap = (year % 4 == 0 and year % 100 != 0) or \
           year % 400 == 0
print(is_leap)
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 一、Python簡介和環(huán)境搭建以及pip的安裝 4課時實驗課主要內(nèi)容 【Python簡介】: Python 是一個...
    _小老虎_閱讀 6,350評論 0 10
  • 運(yùn)算符是處理數(shù)據(jù)的基本方法,用來從現(xiàn)有的值得到新的值。JavaScript 提供了多種運(yùn)算符,本章逐一介紹這些運(yùn)算...
    徵羽kid閱讀 782評論 0 0
  • 官網(wǎng) 中文版本 好的網(wǎng)站 Content-type: text/htmlBASH Section: User ...
    不排版閱讀 4,725評論 0 5
  • 兩個月前朋友被檢查出得了抑郁癥,每天惶惶不可終日,吃不下飯而且還會徹夜失眠,情緒和能量都很低。 于是上...
    是你的六公子閱讀 260評論 0 0
  • 小的聚合類型數(shù)據(jù)的特殊編碼處理 Redis2.2版本及以后,存儲集合數(shù)據(jù)的時候會采用內(nèi)存壓縮技術(shù),以使用更少的內(nèi)存...
    尼小摩閱讀 1,159評論 1 3

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