電腦科學和Python程式設計導論(二 ) Python簡介
基本概念
1. 程式語言的分類
低階程式設計與高階程式設計
:二者之間的區別是,編寫程式時,我們是使用機器層次的指令和資料物件(底層操作),還是使用語言設計者提供的更為抽象的操作(圖形使用者介面,UI)。
通用性與專注於某一應用領域
:指程式語言中的基本操作是廣泛適用的還是隻針對某個領域,例如SQL。
解釋執行與編譯執行
:指程式設計師編寫的指令序列,即原始碼是直接執行(通過直譯器,使用解釋型語言編寫的程式更易除錯,因為直譯器可以給出與原始碼相關的錯誤資訊。),還是要先轉換成機器層次的基礎操作序列。(通過編譯器,編譯型語言(如,java)編寫的程式速度更快,佔用的空間也更少。)
2. Python 基本元素
python中物件
:物件分為標量物件(不可再分)和非標量物件(有內部結構,可再分)。Python有以下4類標量物件:
- int:表示整數。
- float:表示實數。
- bool:表示布林值True和False。
- None:這個型別只有一個值。
操作符
:物件和操作符可以組成表示式,每個表示式都相當於某種型別的物件,我們稱其為表示式的值。
int型別和float型別支援的操作符
:
- i + j:i和j的和。
- i - j:表示i減j。
- i * j:i和j的積。
- i // j:表示整數除法。只返回商,不返回餘數。
- i / j:表示i除以j。
- i % j:表示int i除以int j的餘數。通常讀作i mod j,是i modulo j的縮寫。
- i ** j:表示i的j次方。如果i和j都是int型別,結果也是int型別。
注:如果i和j都是int型別,結果也是int型別。如果其中任意一個是float型別,那麼結果就是float型別。
比較運算子
:包括:==(等於)、!=(不等於)、>(大於)、>=(大於等於)、<(小於)和<=(小於等於)。
bool型別上的基本操作符
:and、or和not
- a and b:當a和b都為True時,值為True,否則為False。
- a or b:當a和b至少有一個為True時,值為True,否則為False。
- not a:如果a為False,值為True;如果a為True,值為False。
變數
:在Python中,變數僅是名稱,沒有其他意義。賦值語句將=左邊的名稱與=右邊的表示式所表示的物件關聯起來,一個物件可以有一個或多個名稱與之關聯,也可以不關聯任何名稱。
多重賦值
:Python支援多重賦值。如:x, y = 2, 3
變數名
:將程式寫得清晰易懂極其重要,恰當地選擇變數名稱在增強程式可讀性方面扮演了重要角色。
- 在Python中,變數名可以包含大寫字母、小寫字母、數字(但不能以數字開頭)和特殊字元_。
- Python變數名是大小寫敏感的,如Julie和julie就是不同的變數名。最後,Python中還有少量的保留字(有時稱為關鍵字),它們有專門的意義,不能用作變數名。
- Python 3中的保留字包括and、as、assert、break、class、continue、def、del、elif、else、except、False、finally、for、from、global、if、import、in、is、lambda、nonlocal、None、not、or、pass、raise、return、True、try、while、with和 yield。
3. 程式分支
最簡單的分支型程式是條件語句
程式執行時間
:
- 假定每行程式碼都需要以單位時間執行,那麼有n行程式碼的直線型程式就需要n個單位時間。那麼有n行程式碼的分支型程式呢?它執行的時間可能會少於n個單位時間,但絕不會超過n個單位時間,因為每行程式碼至多執行一次。
- 如果一個程式執行的最長時間是由程式長度決定的,那麼可以稱為以常數時間執行。這並不意味著它每次執行都執行相同的步驟,而意味著存在一個常數k,使得這個程式肯定會在k個步驟之內結束執行。其中隱含的意義是,這種程式的執行時間並不隨著程式輸入量的增加而增加。
4. 字串和輸入
str型別的物件
:用來表示由字元組成的字串。str型別的字面量可以用單引號或雙引號表示,如’abc’或”abc”。
過載
:即根據應用其上的物件型別的不同,它的意義也不同。操作符+存在過載的情形,例如:
- 應用於兩個數值物件時,它表示相加;
- 應用於兩個字串時,它表示連線。
字串
:是Python中的序列型別之一。所有序列型別都可以執行以下操作:
- 可以使用len函式求出字串的長度。例如,len(‘abc’)的值是3。
- 可以使用索引從字串提取單個字元。例如,在直譯器中輸入’abc’[0]會顯示字串’a’。
- 可以使用切片操作從字串提取任意長度的子串。如果s是個字串,那麼表示式s[start:end]就表示s中從索引start開始至索引end-1結束的子串。例如,’abc’[1:3] =’bc’ 。
注
:為什麼在索引end-1 處而不是在end 處結束呢? 這樣做是為了讓’abc’[0:len(‘abc’)]這樣的表示式具有我們希望的值。如果冒號前面的索引值省略,那麼預設值為0;如果冒號後面的索引值省略,那麼預設值就是字串的長度。於是,表示式’abc’[:]在語義上就等同於更加冗長的’abc’[0:len(‘abc’)]。
input函式
:可以直接接受使用者輸入。它可以使用一個字串作為引數,顯示在shell中作為提示資訊,然後等待使用者輸入,使用者輸入以Enter鍵結束。使用者輸入的行資訊被看作一個字串,併成為這個函式的返回值。
name = input('Enter your name: ')
字串進行型別轉換
:只要字串中的值是某種型別的有效字面量,就可以對字串進行型別轉換。
例如,int(‘3’) * 4的值是12。
當一個float值被轉換成int值時,數值是被截斷的(不是四捨五入)。
例如,int(3.9)的值是int 3。
Unicode編碼的由來
:
字串存在編碼問題。
- 計算機只能處理數字,如果要處理文字,就必須先把文字轉換為數字才能處理。最早的計算機在設計時採用8個位元(bit)作為一個位元組(byte),所以,一個位元組能表示的最大的整數就是255(二進位制11111111=十進位制255)(2的8次冪等於256,即8個位置每個位置可以選擇0或者1,總共有256種可能,從0開始就到了255),0 - 255被用來表示大小寫英文字母、數字和一些符號,這個編碼表被稱為ASCII編碼,比如大寫字母 A 的編碼是65,小寫字母 z 的編碼是122。
- 如果要表示中文,顯然一個位元組是不夠的,至少需要兩個位元組,而且還不能和ASCII編碼衝突,所以,中國製定了GB2312編碼,用來把中文編進去。
- 類似的,日文和韓文等其他語言也有這個問題。為了統一所有文字的編碼,Unicode應運而生。Unicode把所有語言都統一到一套編碼裡,這樣就不會再有亂碼問題了。
- Unicode通常用兩個位元組表示一個字元(這時候就有2的16次冪種可能),原有的英文編碼從單位元組變成雙位元組,只需要把高位元組全部填為0就可以。
UnicodeDecodeError處理
:
如果中文字串在Python環境下遇到 UnicodeDecodeError,這是因為.py檔案儲存的格式有問題。 可以在第一行新增註釋:
# -*- coding: utf-8 -*-
目的是告訴Python直譯器,用UTF-8編碼讀取原始碼。
5. 迭代
需要程式多次做同一件事情的時候,可以使用迭代語句,最簡單的迭代語句就是for迴圈
程式設計練習
1.實際練習:編寫一個程式,檢查3個變數x、y和z,輸出其中最大的奇數。如果其中沒有奇數,就輸出一個訊息進行說明。
# 解法1
def odd_max_input(x, y, z):
list = []
for i in [x, y, z]:
if i % 2 == 1:
list.append(i)
if len(list) == 0:
print('沒有奇數')
else:
print(max(list))
# 解法2
def odd_max_input(x,y,z):
a=sorted([x,y,z],reverse=True)
for i in a:
if i%2==1:
return i
print('沒有奇數')
# 解法3
def odd_max_input2(x,y,z):
a=[x,y,z]
max =0
for i in a:
if i%2==1:
if i > max:
max = i
if max==0:
print('沒有奇數')
else:
print(max)
2.實際練習:將以下程式碼中的註釋替換為while迴圈語句。
numXs = int(input(‘How many times should I print the letter X? ‘))
toPrint = ”
numXss=abs(numXs)
concatenate X to toPrint numXs times
numXs = int(input('How many times should I print the letter X? '))
toPrint = ''
while numXss!=0:
toPrint = toPrint+'X'
numXss=numXss-1
print(toPrint)
3.實際練習:編寫一個程式,要求使用者輸入10個整數,然後輸出其中最大的奇數。如果使用者沒 有輸入奇數,則輸出一個訊息進行說明。
# 解法1
a=0
numXs =[]
while a!=10:
b=int(input('please input 10 int '))
numXs.append(b)
a+=1
numXss=sorted(numXs,reverse=True)
c=0
for i in numXss:
c+=1
if i%2==1:
print('最大的奇數是{}'.format(i))
break
elif c==10:
# 解法2
r = input('輸入10個數字,用,[英文格式]間隔:')
list = [i for i in map(lambda i: int(i), r.split(',')) if i % 2 == 1]
print(list)
if len(list) == 0:
print('no odd')
else:
print(max(list))
相關文章
- 電腦科學和Python程式設計導論week1Python程式設計
- 電腦科學和Python程式設計導論(一) 計算機相關理論Python程式設計計算機
- 電腦科學和Python程式設計導論(三) 一些簡單的數值程式Python程式設計
- 電腦科學和Python程式設計導論(六) 測試與除錯Python程式設計除錯
- Python程式設計方法論學習Python程式設計
- 學習Python程式設計哪種線路科學?Python程式設計
- 01 Python3程式設計之程式設計語法簡介Python程式設計
- Python學習之物件導向程式設計Python物件程式設計
- Python物件導向程式設計Python物件程式設計
- Python 物件導向程式設計Python物件程式設計
- 好程式設計師Python培訓分享numpy簡介程式設計師Python
- Python學習之路——類-物件導向程式設計Python物件程式設計
- PYTHON程式設計導論群【提問與解惑】資料統計Python程式設計
- 簡單介紹python程式設計之檔案讀寫Python程式設計
- Python OOP 物件導向程式設計PythonOOP物件程式設計
- python技能--物件導向程式設計Python物件程式設計
- Python物件導向程式設計(1)Python物件程式設計
- Python - 物件導向程式設計 - super()Python物件程式設計
- Python - 物件導向程式設計 - @propertyPython物件程式設計
- Python學習之物件導向高階程式設計Python物件程式設計
- 計算機二級python指導用書程式設計題答案計算機Python程式設計
- Python - 物件導向程式設計 - __new()__ 和單例模式Python物件程式設計單例模式
- 簡單理解非同步程式設計(python)和非同步程式設計(nodejs)非同步程式設計PythonNodeJS
- Python多工程式設計介紹Python程式設計
- Python 程式設計學習Python程式設計
- 學程式設計,Python和Java哪個更好?程式設計PythonJava
- 【論文】核心電腦科學會議排名
- 開啟電腦就能學習,風變程式設計讓學習程式設計更簡單程式設計
- 史上最全 Python 物件導向程式設計Python物件程式設計
- python基礎(物件導向程式設計)Python物件程式設計
- python物件導向程式設計基礎Python物件程式設計
- python之物件導向程式設計(一)Python物件程式設計
- 14 Python物件導向程式設計:反射Python物件程式設計反射
- 圖解python | 物件導向程式設計圖解Python物件程式設計
- C#學習筆記(六)——物件導向程式設計簡介C#筆記物件程式設計
- 《Python程式設計練習與解答》之程式設計概論Python程式設計
- 大神之路-起始篇 | 第1章.電腦科學導論之【基礎緒論】學習筆記筆記
- IT程式設計各學科語言的介紹程式設計