4、python基礎運算和流程控制

曲~線發表於2018-09-16

基礎運算和流程控制

1、註釋

當行註釋:# 被註釋內容
多行註釋:“`被註釋內容“`,或者”””被註釋內容”””

2、變數

變數是什麼? 變數:把程式執行的中間結果臨時的存在記憶體裡,以便後續的程式碼呼叫。

2.1、宣告變數

name = “taibai”
上述程式碼宣告瞭一個變數,變數名為: name,變數name的值為:”taibai”
變數的作用:暱稱,其代指記憶體裡某個地址中儲存的內容

2.2、變數定義的規則:

 變數名只能是 字母、數字或下劃線的任意組合
 變數名的第一個字元不能是數字
 以下關鍵字不能宣告為變數名
[`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`]
 變數的定義要具有可描述性。
2.3、推薦定義方式

駝峰體

AgeOfOldboy = 56

NumberOfStudents = 80

下劃線

age_of_oldboy = 56

number_of_students = 80
你覺得哪種更清晰,哪種就是官方推薦的,我想你肯定會先第2種,第一種AgeOfOldboy咋一看以為是AngelaBaby
2.4、變數的賦值
#!/usr/bin/env python
# -*- coding: utf-8 -*-

name1 = “wupeiqi”
name2 = “alex”

#!/usr/bin/env python
# -*- coding: utf-8 -*-

name1 = “taibai”
name2 = name1

2.5、定義變數不好的方式舉例

 變數名為中文、拼音
 變數名過長
 變數名詞不達意

3、常量

常量即指不變的量,如pai 3.141592653…, 或在程式執行過程中不會改變的量
舉例,假如老男孩老師的年齡會變,那這就是個變數,但在一些情況下,他的年齡不會變了,那就是常量。在Python中沒有一個專門的語法代表常量,程式設計師約定俗成用變數名全部大寫代表常量
AGE_OF_OLDBOY = 56
在c語言中有專門的常量定義語法,const int count = 60;一旦定義為常量,更改即會報錯

4、程式互動

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# 將使用者輸入的內容賦值給 name 變數
name = input(“請輸入使用者名稱:”)
# 列印輸入的內容
print(name)
執行指令碼就會發現,程式會等待你輸入姓名後再往下繼續走。
可以讓使用者輸入多個資訊,如下
#!/usr/bin/env python
# -*- coding: utf-8 -*-
name = input(“What is your name?”)
age = input(“How old are you?”)
hometown = input(“Where is your hometown?”)

print(“Hello “,name , “your are “, age , “years old, you came from”,hometown)

5、基礎資料型別(初始)

什麼是資料型別?
  我們人類可以很容易的分清數字與字元的區別,但是計算機並不能呀,計算機雖然很強大,但從某種角度上看又很傻,除非你明確的告訴它,1是數字,“漢”是文字,否則它是分不清1和‘漢’的區別的,因此,在每個程式語言裡都會有一個叫資料型別的東東,其實就是對常用的各種資料型別進行了明確的劃分,你想讓計算機進行數值運算,你就傳數字給它,你想讓他處理文字,就傳字串型別給他。Python中常用的資料型別有多種,今天我們暫只講3種, 數字、字串、布林型別

5.1、整數型別(int)。

int(整型)
在32位機器上,整數的位數為32位,取值範圍為-231~231-1,即-2147483648~2147483647
在64位系統上,整數的位數為64位,取值範圍為-263~263-1,即-9223372036854775808~9223372036854775807
long(長整型)
跟C語言不同,Python的長整數沒有指定位寬,即:Python沒有限制長整數數值的大小,但實際上由於機器記憶體有限,我們使用的長整數數值不可能無限大。
注意,自從Python2.2起,如果整數發生溢位,Python會自動將整數資料轉換為長整數,所以如今在長整數資料後面不加字母L也不會導致嚴重後果了。
注意:在Python3裡不再有long型別了,全都是int

>>> a= 2**64
>>> type(a) #type()是檢視資料型別的方法
<type `long`>
>>> b = 2**60
>>> type(b)
<type `int`>

除了int和long之外, 其實還有float浮點型, 複數型,但今天先不講啦

5.2、字串型別(str)。

在Python中,加了引號的字元都被認為是字串!

>>> name = "Alex Li" #雙引號
>>> age = "22" #只要加引號就是字串
>>> age2 = 22 #int
>>>
>>> msg = ```My name is Alex, I am 22 years old!``` #我擦,3個引號也可以
>>>
>>> hometown = `ShanDong` #單引號也可以

那單引號、雙引號、多引號有什麼區別呢? 讓我大聲告訴你,單雙引號木有任何區別,只有下面這種情況 你需要考慮單雙的配合
msg = “My name is Alex , I`m 22 years old!”
多引號什麼作用呢?作用就是多行字串必須用多引號
msg = “`
今天我想寫首小詩,
歌頌我的同桌,
你看他那烏黑的短髮,
好像一隻炸毛雞。
“`
print(msg)
字串拼接
數字可以進行加減乘除等運算,字串呢?讓我大聲告訴你,也能?what ?是的,但只能進行”相加”和”相乘”運算。

>>> name
`Alex Li`
>>> age
`22`
>>>
>>> name + age #相加其實就是簡單拼接
`Alex Li22`
>>>
>>> name * 10 #相乘其實就是複製自己多少次,再拼接在一起
`Alex LiAlex LiAlex LiAlex LiAlex LiAlex LiAlex LiAlex LiAlex LiAlex Li`

注意,字串的拼接只能是雙方都是字串,不能跟數字或其它型別拼接

>>> type(name),type(age2)
(<type `str`>, <type `int`>)
>>>
>>> name
`Alex Li`
>>> age2
22
>>> name + age2
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: cannot concatenate `str` and `int` objects #錯誤提示數字 和 字元 不能拼接

8.3、布林值(True,False)。

布林型別很簡單,就兩個值 ,一個True(真),一個False(假), 主要用記邏輯判斷
但其實你們並不明白對麼? let me explain, 我現在有2個值 , a=3, b=5 , 我說a>b你說成立麼? 我們當然知道不成立,但問題是計算機怎麼去描述這成不成立呢?或者說a< b是成立,計算機怎麼描述這是成立呢?
沒錯,答案就是,用布林型別

>>> a=3
>>> b=5
>>>
>>> a > b #不成立就是False,即假
False
>>>
>>> a < b #成立就是True, 即真
True

6、格式化輸出。

現有一練習需求,問使用者的姓名、年齡、工作、愛好 ,然後列印成以下格式
———— info of Alex Li ———–
Name : Alex Li
Age : 22
job : Teacher
Hobbie: girl
————- end —————–
你怎麼實現呢?你會發現,用字元拼接的方式還難實現這種格式的輸出,所以一起來學一下新姿勢
只需要把要列印的格式先準備好, 由於裡面的 一些資訊是需要使用者輸入的,你沒辦法預設知道,因此可以先放置個佔位符,再把字串裡的佔位符與外部的變數做個對映關係就好啦
name = input(“Name:”)
age = input(“Age:”)
job = input(“Job:”)
hobbie = input(“Hobbie:”)

info = “`
———— info of %s ———– #這裡的每個%s就是一個佔位符,本行的代表 後面拓號裡的 name
Name : %s #代表 name
Age : %s #代表 age
job : %s #代表 job
Hobbie: %s #代表 hobbie
————- end —————–
“` %(name,name,age,job,hobbie) # 這行的 % 號就是 把前面的字串 與拓號 後面的 變數 關聯起來

print(info)
%s就是代表字串佔位符,除此之外,還有%d,是數字佔位符, 如果把上面的age後面的換成%d,就代表你必須只能輸入數字啦
age : %d
我們執行一下,但是發現出錯了。。。

說%d需要一個數字,而不是str, what? 我們明明輸入的是數字呀,22,22呀。
不用擔心 ,不要相信你的眼睛我們除錯一下,看看輸入的到底是不是數字呢?怎麼看呢?檢視資料型別的方法是什麼來著?type()
name = input(“Name:”)
age = input(“Age:”)
print(type(age))
執行輸出是
Name:Alex
Age:22
<class `str`> #怎麼會是str
Job:IT
讓我大聲告訴你,input接收的所有輸入預設都是字串格式!
要想程式不出錯,那怎麼辦呢?簡單,你可以把str轉成int
age = int( input(“Age:”) )
print(type(age))
肯定沒問題了。相反,能不能把字串轉成數字呢?必然可以,str( yourStr )
問題:現在有這麼行程式碼
msg = “我是%s,年齡%d,目前學習進度為80%”%(`金鑫`,18)
print(msg)
這樣會報錯的,因為在格式化輸出裡,你出現%預設為就是佔位符的%,但是我想在上面一條語句中最後的80%就是表示80%而不是佔位符,怎麼辦?
msg = “我是%s,年齡%d,目前學習進度為80%%”%(`金鑫`,18)
print(msg)
這樣就可以了,第一個%是對第二個%的轉譯,告訴Python直譯器這只是一個單純的%,而不是佔位符。

7、基本運算子

運算子
  計算機可以進行的運算有很多種,可不只加減乘除這麼簡單,運算按種類可分為算數運算、比較運算、邏輯運算、賦值運算、成員運算、身份運算、位運算,今天我們暫只學習算數運算、比較運算、邏輯運算、賦值運算
算數運算
以下假設變數:a=10,b=20

比較運算
以下假設變數:a=10,b=20

賦值運算
以下假設變數:a=10,b=20

邏輯運算

針對邏輯運算的進一步研究:
  1,在沒有()的情況下not 優先順序高於 and,and優先順序高於or,即優先順序關係為( )>not>and>or,同一優先順序從左往右計算。
例題:
判斷下列邏輯語句的True,False。

1,3>4 or 4<3 and 1==1
2,1 < 2 and 3 < 4 or 1>2
3,2 > 1 and 3 < 4 or 4 > 5 and 2 < 1
4,1 > 2 and 3 < 4 or 4 > 5 and 2 > 1 or 9 < 8
5,1 > 1 and 3 < 4 or 4 > 5 and 2 > 1 and 9 > 8 or 7 < 6
6,not 2 > 1 and 3 < 4 or 4 > 5 and 2 > 1 and 9 > 8 or 7 < 6

2 , x or y , x為真,值就是x,x為假,值是y;
x and y, x為真,值是y,x為假,值是x。

例題:求出下列邏輯語句的值。

8 or 4
0 and 3
0 or 4 and 3 or 7 or 9 and 6
in,not in :

判斷子元素是否在原字串(字典,列表,集合)中:
例如:
#print(`喜歡` in `dkfljadklf喜歡hfjdkas`)
#print(`a` in `bcvd`)
#print(`y` not in `ofkjdslaf`)

8、流程控制之–if

假如把寫程式比做走路,那我們到現在為止,一直走的都是直路,還沒遇到過分叉口,想象現實中,你遇到了分叉口,然後你決定往哪拐必然是有所動機的。你要判斷那條岔路是你真正要走的路,如果我們想讓程式也能處理這樣的判斷怎麼辦? 很簡單,只需要在程式裡預設一些條件判斷語句,滿足哪個條件,就走哪條岔路。這個過程就叫流程控制。

if...else 語句
單分支
if 條件:
滿足條件後要執行的程式碼
雙分支
"""
if 條件:
滿足條件執行程式碼
else:
if條件不滿足就走這段
"""
AgeOfOldboy = 48

if AgeOfOldboy > 50 :
print("Too old, time to retire..")
else:
print("還能折騰幾年!")
縮排

這裡必須要插入這個縮排的知識點
你會發現,上面的if程式碼裡,每個條件的下一行都縮排了4個空格,這是為什麼呢?這就是Python的一大特色,強制縮排,目的是為了讓程式知道,每段程式碼依賴哪個條件,如果不通過縮排來區分,程式怎麼會知道,當你的條件成立後,去執行哪些程式碼呢?
在其它的語言裡,大多通過{}來確定程式碼塊,比如C,C++,Java,Javascript都是這樣,看一個JavaScript程式碼的例子

var age = 56
if ( age < 50){
console.log("還能折騰")
console.log(`可以執行多行程式碼`)
}else{
console.log(`太老了`)
}

在有{}來區分程式碼塊的情況下,縮排的作用就只剩下讓程式碼變的整潔了。
Python是門超級簡潔的語言,發明者定是覺得用{}太醜了,所以索性直接不用它,那怎麼能區分程式碼塊呢?答案就是強制縮排。
Python的縮排有以下幾個原則:
 頂級程式碼必須頂行寫,即如果一行程式碼本身不依賴於任何條件,那它必須不能進行任何縮排
 同一級別的程式碼,縮排必須一致
 官方建議縮排用4個空格,當然你也可以用2個,如果你想被人笑話的話。
多分支
回到流程控制上來,if…else …可以有多個分支條件

if 條件:
滿足條件執行程式碼
elif 條件:
上面的條件不滿足就走這個
elif 條件:
上面的條件不滿足就走這個
elif 條件:
上面的條件不滿足就走這個
else:
上面所有的條件不滿足就走這段

寫個猜年齡的遊戲吧

age_of_oldboy = 48

guess = int(input(">>:"))

if guess > age_of_oldboy :
print("猜的太大了,往小裡試試...")

elif guess < age_of_oldboy :
print("猜的太小了,往大里試試...")

else:
print("恭喜你,猜對了...")

上面的例子,根據你輸入的值不同,會最多得到3種不同的結果
再來個匹配成績的小程式吧,成績有ABCDE5個等級,與分數的對應關係如下
A 90-100
B 80-89
C 60-79
D 40-59
E 0-39
要求使用者輸入0-100的數字後,你能正確列印他的對應成績

score = int(input("輸入分數:"))

if score > 100:
print("我擦,最高分才100...")
elif score >= 90:
print("A")
elif score >= 80:
print("B")
elif score >= 60:
print("C")
elif score >= 40:
print("D")
else:
print("太笨了...E")

這裡有個問題,就是當我輸入95的時候 ,它列印的結果是A,但是95 明明也大於第二個條件elif score >=80:呀, 為什麼不列印B呢?這是因為程式碼是從上到下依次判斷,只要滿足一個,就不會再往下走啦,這一點一定要清楚呀!

9、流程控制之–while迴圈

9.1,基本迴圈

while 條件:
 
# 迴圈體

# 如果條件為真,那麼迴圈體則執行
# 如果條件為假,那麼迴圈體不執行

9.2、迴圈中止語句

如果在迴圈的過程中,因為某些原因,你不想繼續迴圈了,怎麼把它中止掉呢?這就用到break 或 continue 語句
 break用於完全結束一個迴圈,跳出迴圈體執行迴圈後面的語句
 continue和break有點類似,區別在於continue只是終止本次迴圈,接著還執行後面的迴圈,break則完全終止迴圈
例子:break

count = 0
while count <= 100 : #只要count<=100就不斷執行下面的程式碼
print("loop ", count)
if count == 5:
break
count +=1 #每執行一次,就把count+1,要不然就變成死迴圈啦,因為count一直是0

print(“—–out of while loop ——“)
輸出
loop 0
loop 1
loop 2
loop 3
loop 4
loop 5
—–out of while loop ——
例子:continue

count = 0
while count <= 100 :
count += 1
if count > 5 and count < 95: #只要count在6-94之間,就不走下面的print語句,直接進入下一次loop
continue
print("loop ", count)

print(“—–out of while loop ——“)
輸出
loop 1
loop 2
loop 3
loop 4
loop 5
loop 95
loop 96
loop 97
loop 98
loop 99
loop 100
loop 101
—–out of while loop ——

9.3、while … else ..

與其它語言else 一般只與if 搭配不同,在Python 中還有個while …else 語句
while 後面的else 作用是指,當while 迴圈正常執行完,中間沒有被break 中止的話,就會執行else後面的語句

count = 0
while count <= 5 :
count += 1
print("Loop",count)

else:
print("迴圈正常執行完啦")
print("-----out of while loop ------")

輸出
Loop 1
Loop 2
Loop 3
Loop 4
Loop 5
Loop 6
迴圈正常執行完啦
—–out of while loop ——
如果執行過程中被break啦,就不會執行else的語句啦

count = 0
while count <= 5 :
count += 1
if count == 3:break
print("Loop",count)

else:
print("迴圈正常執行完啦")
print("-----out of while loop ------")

輸出
Loop 1
Loop 2
—–out of while loop ——
10、相關練習題
1、使用while迴圈輸入 1 2 3 4 5 6 8 9 10
2、求1-100的所有數的和
3、輸出 1-100 內的所有奇數
4、輸出 1-100 內的所有偶數
5、求1-2+3-4+5 … 99的所有數的和

sum = 0
for i in range(1,101):
    if i % 2 :
        sum -= i
    else:
        sum += i
    print(i,sum)
print(sum)

6、使用者登陸(三次機會重試)

login = `xiaoming`
password = 123
i = 0
while i <3 :
    i += 1
    print(`請輸入賬號`)
    lg = input()
    print(`請輸入密碼`)
    pw = int(input().strip())      #.strip() 去空格
    if login == lg and password == pw :
        print(`登陸成功`)
        break
    print(`重新登陸`)


相關文章