這節課我們來做一個四則運算器,輸入2個數字和1個運算符,讓程序計算出結果。
上節課我們做了加法計算器和減法計算器,課后練習做了乘法計算器和除法計算器
再來復習一下,加法計算器:
num1=input("num1:")
num2=input("num2:")
num3=num1+num2
PRint num1,"+",num2,"=",num3
減法計算器:
num1=input("num1:")
num2=input("num2:")
num3=num1-num2
print num1,"-",num2,"=",num3
乘法計算器:
num1=input("num1:")
num2=input("num2:")
num3=num1*num2
print num1,"*",num2,"=",num3
除法計算器:
num1=input("num1:")
num2=input("num2:")
num3=num1/num2
print num1,"/",num2,"=",num3
大家發現沒有,代碼非常類似,有沒有辦法可以將4個程序合并起來,做成一個四則運算器呢
如果程序在輸入第一個數字之后,要求用戶輸入一個運算符號,然后輸入第二個數字之后,程序判斷運算符號是哪一個從而計算出正確的結果,這樣就可以實現了
問題來了,如何實現判斷運算符號的程序呢
0和1的世界
計算機的世界是一個精確的世界,在計算機的世界里面,只有0和1
因為計算機是由電驅動的,是由邏輯電路組成的,而邏輯電路只有2個狀態,開關的接通和斷開,這兩種狀態正好用1和0來表示
通過逢二進一規則,也就是二進制,進行計算的時候,運算規則簡單,有利于簡化計算機內部結構,提高運算速度
那么什么是二進制,通常我們熟悉的阿拉伯數字都是十進制,也就是低位逢十向高位進一,而二進制只有0和1,所以變成逢2向高位進1,我們來看下面最簡單的一個計算,求1011+11的和
十進制的1=二進制的1
十進制的2=二進制的10
十進制的3=二進制的11
十進制的4=二進制的100
十進制的5=二進制的101
十進制的6=二進制的110
十進制的7=二進制的111
十進制的8=二進制的1000
十進制的9=二進制的1001
十進制的10=二進制的1010
十進制的11=二進制的1011
十進制的12=二進制的1100
十進制的13=二進制的1101
十進制的14=二進制的1110
根據二進制計算規則,1011(11)+11(3)=1110(14)
大家再做一個二進制計算題,101+11,看看等于多少,然后轉換為十進制看看
布爾類型Ture和False
真實世界中有一對概念,真和假
體現在計算機世界,就是布爾數據類型,True和False
主要的作用就是用來做邏輯判斷,判斷條件是否成立
例如:如果某某為真,則這樣處理,否則,那樣處理
例如:如果今天下雨,則去圖書館看書,否則去操場踢足球
這里的“今天下雨”就是一個邏輯判斷,結果可能為True,也可能為False
如果為True,則去圖書館看書,如果為False,則去操場踢足球
例如:如果考試分數>=60,則及格,否則不及格
這里的“考試分數>=60”就是一個邏輯判斷,結果可能為True,也可能為False
如果為True,則及格,如果為False,則不及格
邏輯運算符and和or和not
針對邏輯判斷,有3種邏輯運算,從而可以組合形成更復雜的判斷
例如:如果今天下雨并且帶傘,則去圖書館看書,否則如果今天下雨并且沒打傘,則在家看書,否則去操場踢足球
not 邏輯非 不是
and 邏輯與 并且
or 邏輯或 或者
not 相反的判斷,針對1個邏輯值計算
計算公式:not True = False , not False = True
and 兩者都為True則結果為True否則為False,針對2個邏輯值計算
計算公式:True and True = True, True and False = False, False and True = False, False and False = False
or 兩者任一為True則結果為True,兩者都是False才為False,針對2個邏輯值計算
計算公式:True or True = True, True or False = True, False or True = True, False or False = False
計算一下:not True and not False = ?
如果一個邏輯運算里面包含了多個邏輯運算符,則存在優先級,就是誰先計算,誰后計算
優先級按如下排:not and or 同級運算從左至右
因此上面的計算結果應該是:not True先運算,結果為False,然后因為優先級not優先于and,先計算后面的not False
,結果為True,最后計算False and True,最后結果為False
再計算一個:False or not True and not False = ?
if判斷語句
在python程序里面,判斷語句的格式是這樣的:
if 邏輯運算結果1=True :
執行A
elif 邏輯運算結果2=True :
執行B
else :
執行C
執行的邏輯是:如果邏輯運算結果1為True,則執行A,否則的話,再判斷邏輯運算結果2為True,則執行B,前面2個不滿足則執行C
其中的執行A,執行B,執行C ,都是指一段代碼,可以是0行或1行或多行代碼,不是僅僅限定1行代碼的意思
其中elif可以允許出現0個或1個或多個,else可以允許出現0個或1個
冒號表示下面的代碼行是一個新的段落,每個新的段落,通過在行首輸入相同的空格來進行區分,簡稱縮進
python最重要的規則:縮進的空格數整個程序必須一致。
如果你用了2個空格作為縮進規則,則程序中所有的行的縮進規則都是2個空格
一般我們都習慣用4個空格
例如執行A假如是3行代碼,執行B假如是4行代碼,執行C假如是1行代碼
那么加起來的8行代碼每一行的前面都應該是4個空格,表示這些代碼都是相同的縮進格式
如果執行A的3行代碼每一行用了4個空格,而執行B的4行代碼每一行用了8個空格,程序執行的時候就會報錯
后面我們在具體做實驗的時候可以體會
if判斷語句舉例:
例子1,單個分支:
if score>=60 :
print "及格"
例子2,2個分支:
if score>=60 :
print "及格"
else :
print "不及格"
例子3,3個分支
if score>=80 :
print "良好"
elif score>=60 :
print "及格"
else :
print "不及格"
例子4,4個分支
if score>=90 :
print "優秀"
elif score>=80 :
print "良好"
elif score>=60 :
print "及格"
else :
print "不及格"
例子5,5個分支
if score==100 :
print "滿分"
elif score>=90 :
print "優秀"
elif score>=80 :
print "良好"
elif score>=60 :
print "及格"
else :
print "不及格"
if判斷輸入的操作符號
回到最初的目標上來:四則運算器
首先,打開原來的add.py程序,另存為cala.py程序
然后在第1行結尾處打回車,增加1個空行,然后增加下面一行代碼:
Operate=input("your operate:")
然后在num3=num1+num2這一行前面增加一行
if operate=="+" :
然后把num3=num1+num2這一行前面增加4個空格
然后,把print 這一行里面的"+"修改為operate,保存代碼
這樣,加法已經可以運行了,我們先測試一下加法是否正確
注意,輸入運算符的時候,一定要前后輸入雙引號,表示這是一個字符串
這樣,程序里面判斷語句 operate=="+" 才能正確進行判斷,這里的==表示是邏輯判斷,而num1=的這個=表示賦值操作符
接下,增加elif分支,判斷減法乘法和除法,在print這行前面增加下列代碼
elif operate=="-" :
num3=num1-num2
elif operate=="*" :
num3=num1*num2
elif operate=="/" :
num3=num1/num2
else :
num3="error operate"
程序測試的重要性
代碼寫好之后,需要通過反復的測試來確保程序是正確的按照預期的邏輯進行處理,這就是測試
測試在軟件工程中是非常重要的一環
測試的目的:
1.確保程序本身正確執行,不會崩潰或死循環,或者無法執行
2.確保程序是按照設計和預期進行執行,得到的結果是正確和符合預期的
3.確保程序在不同環境或者不同條件情況下,仍然能夠正常工作,當然這些條件都是在設計之中。
下面,我們就來測試剛剛做好的四則運算器,注意讓程序的每一種情況每一個分支都運行測試過
課后作業1:
輸入一個分數,根據分數進行判斷,大于等于90分屏幕輸出best,大于等于80分屏幕輸出good,大于等于60分屏幕輸出pass,其他屏幕輸出fail
課后作業2:
輸入月份和日期,根據月份日期判斷是屬于哪個星座的
新聞熱點
疑難解答