1. 指令和程序
計算機的硬件系統通常由五大部件構成,包括:運算器、控制器、存儲器、輸入設備和輸出設備。
其中,運算器和控制器放在一起就是我們通常所說的中央處理器,它的功能是執行各種運算和控制指令以及處理計算機軟件中的數據。我們通常所說的程序實際上就是指令的集合,我們程序就是將一系列的指令按照某種方式組織到一起,然後通過這些指令去控制計算機做我們想讓它做的事情。
今天我們大多數時候使用的計算機,雖然它們的元器件做工越來越精密,處理能力越來越強大,但究其本質來說仍然屬於“馮·諾依曼結構”的計算機。“馮·諾依曼結構”有兩個關鍵點,一是指出要將存儲設備與中央處理器分開,二是提出了將數據以二進制方式編碼。
二進制是一種“逢二進一”的計數法,跟我們人類使用的“逢十進一”的計數法沒有實質性的區別,人類因爲有十根手指所以使用了十進制(因爲在數數時十根手指用完之後就只能進位了,當然凡事都有例外,瑪雅人可能是因爲長年光着腳的原因把腳趾頭也算上了,於是他們使用了二十進制的計數法,在這種計數法的指導下瑪雅人的歷法就與我們平常使用的歷法不一樣,而按照瑪雅人的歷法,2012年是上一個所謂的“太陽紀”的最後一年,而2013年則是新的“太陽紀”的開始,後來這件事情被以訛傳訛的方式誤傳爲”2012年是瑪雅人預言的世界末日“這種荒誕的說法,今天我們可以大膽的猜測,瑪雅文明之所以發展緩慢估計也與使用了二十進制有關)。
對於計算機來說,二進制在物理器件上來說是最容易實現的(高電壓表示1,低電壓表示0),於是在“馮·諾依曼結構”的計算機都使用了二進制。雖然我們並不需要每個程序員都能夠使用二進制的思維方式來工作,但是瞭解二進制以及它與我們生活中的十進制之間的轉換關係,以及二進制與八進制和十六進制的轉換關係還是有必要的。如果你對這一點不熟悉,可以自行使用維基百科或者百度百科科普一下。
2. 變量和類型
在程序設計中,變量是一種存儲數據的載體。計算機中的變量是實際存在的數據或者說是存儲器中存儲數據的一塊內存空間,變量的值可以被讀取和修改,這是所有計算和控制的基礎。
計算機能處理的數據有很多種類型,除了數值之外還可以處理文本、圖形、音頻、視頻等各種各樣的數據,那麼不同的數據就需要定義不同的存儲類型。Python中的數據類型很多,而且也允許我們自定義新的數據類型(這一點在後面會講到),我們先介紹幾種常用的數據類型。
- 整型:Python中可以處理任意大小的整數(Python 2.x中有int和long兩種類型的整數,但這種區分對Python來說意義不大,因此在Python 3.x中整數只有int這一種了),而且支持二進制(如0b100,換算成十進制是4)、八進制(如0o100,換算成十進制是64)、十進制(100)和十六進制(0x100,換算成十進制是256)的表示法。
- 浮點型:浮點數也就是小數,之所以稱爲浮點數,是因爲按照科學記數法表示時,一個浮點數的小數點位置是可變的,浮點數除了數學寫法(如123.456)之外還支持科學計數法(如1.23456e2)。
- 字符串型:字符串是以單引號或雙引號括起來的任意文本,比如'hello'和"hello",字符串還有原始字符串表示法、字節字符串表示法、Unicode字符串表示法,而且可以書寫成多行的形式(用三個單引號或三個雙引號開頭,三個單引號或三個雙引號結尾)。
- 布爾型:布爾值只有True、False兩種值,要麼是True,要麼是False,在Python中,可以直接用True、False表示布爾值(請注意大小寫),也可以通過布爾運算計算出來(例如3 < 5會產生布爾值True,而2 == 1會產生布爾值False)。
- 複數型:形如3+5j,跟數學上的複數表示一樣,唯一不同的是虛部的i換成了j。實際上,這個類型並不能算作常用類型,大家瞭解下就可以了。
2.1 變量命名
對於每個變量我們需要給它取一個名字,就如同我們每個人都有屬於自己的響亮的名字一樣。在Python中,變量命名需要遵循以下這些必須遵守硬性規則和強烈建議遵守的非硬性規則。
硬性規則:
變量名由字母(廣義的Unicode字符,不包括特殊字符)、數字和下劃線構成,數字不能開頭,不能有空格。
大小寫敏感(大寫的a和小寫的A是兩個不同的變量)。
不要跟關鍵字(有特殊含義的單詞,後面會講到)和系統保留字(如函數、模塊等的名字)衝突。
以下關鍵字不能聲明爲變量名:
['and', 'as', 'assert', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'exec', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'not', 'or', 'pass', 'print', 'raise', 'return', 'try', 'while', 'with', 'yield']
PEP 8要求:
用小寫字母拼寫,多個單詞用下劃線連接。
受保護的實例屬性用單個下劃線開頭(後面會講到)。
私有的實例屬性用兩個下劃線開頭(後面會講到)。
當然,作爲一個專業的程序員,給變量(事實上應該是所有的標識符)命名時做到見名知意也是非常重要的。
2.1.1 變量聲明
注意:默認情況下,Python 3 源碼文件以 UTF-8 編碼,所有字符串都是 unicode 字符串。 當然你也可以爲源碼文件指定不同的編碼:
在python 2.0版本中需要定義UTF-8編碼,而在python 3.0版本上不需要定義(UTF-8)編碼,可以自定義編碼。
#_*_coding:utf-8_*_ #對於python 2.0版本,兩種定義方式都可以 #coding:utf-8
2.2 變量的使用
下面通過幾個例子來說明變量的類型和變量使用:
2.2.1 算數運算
C:\Users\LPJ>python Python 3.5.2 (v3.5.2:4def2a2901a5, Jun 25 2016, 22:18:55) [MSC v.1900 64 bit (AMD64)] on win32 Type "help", "copyright", "credits" or "license" for more information. >>> a = 1 >>> b = 2 >>> print(a+b) 3 >>> print(a*b) 2 >>> print(a-b) -1 >>> print(a//b) 0 >>> print(a/b) 0.5 >>> print(a%b) 1
注:Python算術運算符
運算符 |
描述 |
實例 |
+ |
加 - 兩個對象相加 |
a + b 輸出結果 33 |
- |
減 - 得到負數或是一個數減去另一個數 |
a - b 輸出結果 9 |
* |
乘 - 兩個數相乘或是返回一個被重複若干次的字符串 |
a * b 輸出結果 252 |
/ |
除 - x除以y |
a / b 輸出結果 1.75 |
% |
取模 - 返回除法的餘數 |
a % b 輸出結果 9 |
** |
冪 - 返回x的y次冪 |
a**b 爲21的12次方結果爲 7355827511386641 |
// |
取整除 - 返回商的整數部分(向下取整) |
a // b 輸出結果 1 |
2.2.2 變量賦值
name = "Mr Li" name2 = name print(name,name2) Mr li Mr li name = "Jack" print("name,name2") Jack Mr li
2.2.3 變量類型的運用
在Python中可以使用type函數對變量的類型進行檢查。程序設計中函數的概念跟數學上函數的概念是一致的,數學上的函數相信大家並不陌生,它包括了函數名、自變量和因變量。如果暫時不理解這個概念也不要緊,我們會在後續的章節中專門講解函數的定義和使用。
""" 使用type()檢查變量的類型 Version: 3.5.2 Author: Liu """ 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'>
數字(Number)類型
可以使用Python中內置的函數對變量類型進行轉換。
int():將一個數值或字符串轉換成整數,可以指定進制。
float():將一個字符串轉換成浮點數。
str():將指定的對象轉換成字符串形式,可以指定編碼。
chr():將整數轉換成該編碼對應的字符串(一個字符)。
ord():將字符串(一個字符)轉換成對應的編碼(整數)
字符串(String)
- python中單引號和雙引號使用完全相同。
- 使用三引號('''或""")可以指定一個多行字符串。
- 轉義符 '\'
- 反斜槓可以用來轉義,使用r可以讓反斜槓不發生轉義。。 如 r"this is a line with \n" 則\n會顯示,並不是換行。
- 按字面意義級聯字符串,如"this " "is " "string"會被自動轉換爲this is string。
- 字符串可以用 + 運算符連接在一起,用 * 運算符重複。
- Python 中的字符串有兩種索引方式,從左往右以 0 開始,從右往左以 -1 開始。
- Python中的字符串不能改變。
- Python 沒有單獨的字符類型,一個字符就是長度爲 1 的字符串。
- 字符串的截取的語法格式如下:變量[頭下標:尾下標:步長]
實例1
""" 使用input()函數獲取鍵盤輸入(字符串) 使用int()函數將輸入的字符串轉換成整數 使用print()函數輸出帶佔位符的字符串 Version: 0.1 Author: liu """ a = int(input('a = ')) b = int(input('b = ')) c = float(input('c = ')) print('%d + %d = %d' % (a, b, a + b)) print('%d - %f = %f' % (a, c, a - c)) print('%d * %f = %f' % (a, c, a * c)) 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))
實例2
#!/usr/bin/python3 str='Runoob' print(str) # 輸出字符串 print(str[0:-1]) # 輸出第一個到倒數第二個的所有字符 print(str[0]) # 輸出字符串第一個字符 print(str[2:5]) # 輸出從第三個開始到第五個的字符 print(str[2:]) # 輸出從第三個開始後的所有字符 print(str * 2) # 輸出字符串兩次 print(str + '你好') # 連接字符串 print('------------------------------') print('hello\nrunoob') # 使用反斜槓(\)+n轉義特殊字符 print(r'hello\nrunoob') # 在字符串前面添加一個 r,表示原始字符串,不會發生轉義
說明:上面的print函數中輸出的字符串使用了佔位符語法,其中%d是整數的佔位符,%f是小數的佔位符,%%表示百分號(因爲百分號代表了佔位符,所以帶佔位符的字符串中要表示百分號必須寫成%%),字符串之後的%後面跟的變量值會替換掉佔位符然後輸出到終端中,運行上面的程序,看看程序執行結果就明白啦。
3. 運算符
Python支持多種運算符,下表大致按照優先級從高到低的順序列出了所有的運算符,運算符的優先級指的是多個運算符同時出現時,先做什麼運算然後再做什麼運算。除了我們之前已經用過的賦值運算符和算術運算符,我們稍後會陸續講到其他運算符的使用。
運算符 |
描述 |
[] [:] |
下標,切片 |
** |
指數 |
~ + - |
按位取反, 正負號 |
* / % // |
乘,除,模,整除 |
+ - |
加,減 |
>> << |
右移,左移 |
& |
按位與 |
^ | |
按位異或,按位或 |
<= < > >= |
小於等於,小於,大於,大於等於 |
== != |
等於,不等於 |
is is not |
身份運算符 |
in not in |
成員運算符 |
not or and |
邏輯運算符 |
= += -= *= /= %= //= **= &= ` |
= ^= >>= <<=` |
說明: 在實際開發中,如果搞不清楚運算符的優先級,可以使用括號來確保運算的執行順序,其中(and比or的優先級高)
下面的例子演示了賦值運算符和複合賦值運算符的使用。
""" 賦值運算符和複合賦值運算符 Version: 0.1 Author: liu """ a = 10 b = 5 a += b # 相當於:a = a + b a *= a + 2 # 相當於:a = a * (a + 2) print(a) # 想想這裏會輸出什麼
下面的例子演示了比較運算符(關係運算符)、邏輯運算符和身份運算符的使用。
""" 比較、邏輯和算身份運算符的使用 Version: 0.1 Author: liu """ 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
口訣:一真或爲真,一假和(且)爲假
比較運算:
賦值運算:
邏輯運算:
成員運算:
身份運算:
位運算:
*按位取反運算規則(按位取反再加1) 詳解http://blog.csdn.net/wenxinwukui234/article/details/42119265
運算符優先級:
更多內容:猛擊這裏
4. 字符編碼
python解釋器在加載 .py 文件中的代碼時,會對內容進行編碼(默認ascill)
ASCII(American Standard Code for Information Interchange,美國標準信息交換代碼)是基於拉丁字母的一套電腦編碼系統,主要用於顯示現代英語和其他西歐語言,其最多隻能用 8 位來表示(一個字節),即:2**8 = 256-1,所以,ASCII碼最多隻能表示 255 個符號。
4.1 關於中文翻譯
爲了處理漢字,程序員設計了用於簡體中文的GB2312和用於繁體中文的big5。
GB2312(1980年)一共收錄了7445個字符,包括6763個漢字和682個其它符號。漢字區的內碼範圍高字節從B0-F7,低字節從A1-FE,佔用的碼位是72*94=6768。其中有5個空位是D7FA-D7FE。
GB2312 支持的漢字太少。1995年的漢字擴展規範GBK1.0收錄了21886個符號,它分爲漢字區和圖形符號區。漢字區包括21003個字符。2000年的 GB18030是取代GBK1.0的正式國家標準。該標準收錄了27484個漢字,同時還收錄了藏文、蒙文、維吾爾文等主要的少數民族文字。現在的PC平臺必須支持GB18030,對嵌入式產品暫不作要求。所以手機、MP3一般只支持GB2312。
從ASCII、GB2312、GBK 到GB18030,這些編碼方法是向下兼容的,即同一個字符在這些方案中總是有相同的編碼,後面的標準支持更多的字符。在這些編碼中,英文和中文可以統一地處理。區分中文編碼的方法是高字節的最高位不爲0。按照程序員的稱呼,GB2312、GBK到GB18030都屬於雙字節字符集 (DBCS)。
有的中文Windows的缺省內碼還是GBK,可以通過GB18030升級包升級到GB18030。不過GB18030相對GBK增加的字符,普通人是很難用到的,通常我們還是用GBK指代中文Windows內碼。
顯然ASCII碼無法將世界上的各種文字和符號全部表示,所以,就需要新出一種可以代表所有字符和符號的編碼,即:Unicode
Unicode(統一碼、萬國碼、單一碼)是一種在計算機上使用的字符編碼。Unicode 是爲了解決傳統的字符編碼方案的侷限而產生的,它爲每種語言中的每個字符設定了統一併且唯一的二進制編碼,規定雖有的字符和符號最少由 16 位來表示(2個字節),即:2 **16 = 65536,
注:此處說的的是最少2個字節,可能更多
UTF-8,是對Unicode編碼的壓縮和優化,他不再使用最少使用2個字節,而是將所有的字符和符號進行分類:ascii碼中的內容用1個字節保存、歐洲的字符用2個字節保存,東亞的字符用3個字節保存...
#!/usr/bin/env python # -*- coding: utf-8 -*- print "你好,世界"
5. 基礎語法
5.1 註釋
Python中單行註釋以 # 開頭,實例如下:
#!/usr/bin/python3 # 第一個註釋 print ("Hello, Python!") # 第二個註釋
執行以上代碼,輸出結果爲:
Hello, Python!
5.2 行與縮進
python最具特色的就是使用縮進來表示代碼塊,不需要使用大括號 {} 。
縮進的空格數是可變的,但是同一個代碼塊的語句必須包含相同的縮進空格數。實例如下:
實例:
if True: print ("True") else: print ("False")
5.3 Print 輸出
print 默認輸出是換行的,如果要實現不換行需要在變量末尾加上 end="":
實例:
#!/usr/bin/python3 x="a" y="b" # 換行輸出 print( x ) print( y ) print('---------') # 不換行輸出 print( x, end=" " ) print( y, end=" " ) print()
注:詳細操作請查看https://www.runoob.com/python3/python3-basic-syntax.html