本章知識點 :> 邏輯思維
- 復(fù)習(xí)一下
p0總結(jié)在線看
p1總結(jié)在線看
這節(jié)課會比較輕松
有人說第1章和第2章的內(nèi)容太豐富了,腦子要擠爆了。好消息是 變量 與 運算 循環(huán) 和 控制; 掌握這4個知識我們已經(jīng)可以寫世界上絕大部分的程序了。(后面的知識不過是現(xiàn)有知識的優(yōu)化而已)
所以第3章和第4章講 邏輯思維 (有沒有感覺到邏輯思維才是真正的核心), 同時也是對 第1章和第2章的復(fù)習(xí)。

錢包的變化
第一個故事是關(guān)于錢包的,嘗試用Python來記錄小明的錢包

- 需求描述
#下面的話描述了小明最近3天的消費情況
#剛開始他的錢包有 100元零5毛
#第一天,花了30元
#第二天,收入10元,花了20元
#第三天,花了25元
# 請用Python程序來表示這個過程~
- 思路
- 從消費情況的描述中我們看到
301020這樣的消費變量 - 我們設(shè)計一個
錢包變量,(思考一下:什么數(shù)據(jù)類型合適?);錢包變量每一天都在變化,不是減少,就是增加

- 設(shè)計錢包變量名:
my_money
my_money = 100.5 #初始值
my_money = my_money - 30 #第一天
my_money = my_money + 10 #第二天
my_money = my_money - 20 #第二天
my_money = my_money - 25 #第三天
print(my_money)
試一下 在線Python
書店打折了
隨著錢包 的變化,我們也感受到了 變量的 變化。
- 我們來到一個書店,來看看書店的場景~
假如一本書的封面標(biāo)價是24.95美元,書店打六折。第一本運費花費3美元,后續(xù)每增加一本的運費是75美分。問買60本一共花費多少錢呢?
- 為什么我們每個思路都要有
輸入輸出呢? - 在編程的開始階段,我們要熟悉去設(shè)計,實現(xiàn)一個小的功能
代碼塊。比如上述的書店場景,可以取名該書買N本總花費計算器 - 我們給代碼段取名,有2個好處,1是這個名字限定了它的功能,也就意味著整理思路時我可以用名字代表它,而不用關(guān)心細(xì)節(jié)
- 2是既然功能這么明確,其他代碼只需要關(guān)心它的輸入
N和 輸出總花費。

- 可能最后的運費增量需要注意是(N-1本)
N=60
total = 0.0
total = 24.95 * 0.6 #書本費
total = total + 3 #第一本
total = total + (N-1)* 0.75 #注意N-1要括號
print(total)
試一下 在線Python
減肥嗎女神
#女神的體重是55公斤
#女神的身高是1米62
#請問根據(jù) BMI 指數(shù),女神需要減肥嗎?
- 這個問題看起來就更加實際了,而且埋藏了一個機關(guān),就是描述里說的
BMI - 在實際問題中,我們需要先去學(xué)習(xí)這個新的知識
BMI(并非編程知識,是實際知識) - 我們可以百度一下

- 我們確保自己理解了BMI的含義
- 現(xiàn)在先開始取名,
女神身材判定器和BMI算法(注意:如果取出了名字,我們就應(yīng)該知道這兩個代碼塊的輸入和輸出) -
女神身材判定器輸入 體重,身高 輸出 減肥 ,不減肥 (過重或肥胖就輸出減肥) -
BMI算法輸入 體重,身高 輸出 過輕,正常,過重,肥胖

- 易錯點:判斷BMI指數(shù)為過重,應(yīng)該用
BMI指數(shù) == "過重"(比較運算) - 試一下編程
height = 1.62
weight = 55
bmi = ‘’ #不知道先為空
"BMI算法"
if bmi == "過重" or bmi == ”肥胖“: #還記得比較運算和布爾運算嗎,== or : 可以看第二章來復(fù)習(xí)
????print("減肥")
if bmi == "過輕" or bmi == ”正?!? #還記得比較運算和布爾運算嗎,== or : 可以看第二章來復(fù)習(xí)
????print("不減肥")
把邏輯分
代碼塊會讓每一塊更加容易編寫!-
現(xiàn)在重點攻克
BMI算法
image.png 嘗試用編程來寫
height = 1.62
weight = 55
bmi = ‘’ #不知道先為空
#"BMI算法"
bmi_zhishu = 0#初始值為0 (注意這里的指數(shù)不要取名為 bmi 不要和之前的重復(fù),因為數(shù)據(jù)不一樣)
bmi_zhishu = weight / (height * height)
if bmi_zhishu < 18.5:
????bmi = ‘過輕’
if bmi_zhishu >= 18.5 and bmi_zhishu < 23.9:
????bmi = ‘正常’
if bmi_zhishu >= 23.9 and bim_zhishu < 27:
????bmi = ‘過重’
if bmi_zhishu >= 27:
????bmi = ‘肥胖’
if bmi == "過重" or bmi == ”肥胖“: #還記得比較運算和布爾運算嗎,== or : 可以看第二章來復(fù)習(xí)
????print("減肥")
if bmi == "過輕" or bmi == ”正常“: #還記得比較運算和布爾運算嗎,== or : 可以看第二章來復(fù)習(xí)
????print("不減肥")
- 易錯點:
bmi在代碼里是bmi描述。bmi_zhishu是浮點類型的指數(shù)值 (一定主要不要重名,會導(dǎo)致變量覆蓋) - 注意:一個變量只能表示一個含義
試一下 在線Python
地鐵1號線

- 問題:我們還是用簡化1號線地鐵問題,假設(shè)只為 王府井(8號站)寫一個Python程序,實現(xiàn)路人問路,并且通過打印
"右走1站"
"右走1站"
...
或者
"左走1站"
"左走1站"
...
來指路。(考慮特殊情況如果 用戶要去的就是 王府井 站,那么請打印 "現(xiàn)在出站")
- 最新要求:用戶只要告知站名(如 ”西單“)就可以問路,不需要告訴站號(如 11)
思考一下
如果只知道 站名,我們?nèi)绾斡肞ython編程得到站號呢(注意:只有得到站號才可以算走幾站)?
不妨先起個名
"站名轉(zhuǎn)站號算法"輸入:站名 輸出 :站號
可以繼承之前的代碼:
start = '王府井'
start_num = 8
end = '?' #具體執(zhí)行時填寫
end_num = 0 #默認(rèn)是0,請用算法計算
#"站名轉(zhuǎn)站號算法"
fangxiang = ''
zou_num = 0
if start_num == end_num:
????print("現(xiàn)在出站")
if start_num < end_num:
????fangxiang = '右'
????zou_num = end_num - start_num
????a = 0
????while a < zou_num:
????????print(fangxiang+'走1站') #一定要4個空格
????????a = a + 1
if start_num > end_num:
????fangxiang = '左'
????zou_num = start_num - end_num
????a = 0
????while a < zou_num:
????????print(fangxiang+'走1站') #一定要4個空格
????????a = a + 1
- "站名轉(zhuǎn)站號算法"
- 看下圖,如果 站名是“王府井” 站號是 8,依次可以推,如果站名 “西單” 站號 11 .... ...
- 一旦思路能轉(zhuǎn)到 如果 ...這樣的表達(dá),就很接近程序了

- 代碼
start = '王府井'
start_num = 8
end = '?' #具體執(zhí)行時填寫
end_num = 0 #默認(rèn)是0,請用算法計算
#"站名轉(zhuǎn)站號算法"
if end == '四惠東':
????end_num = 1
if end == '四惠':
????end_num = 2
if end == '大望路':
????end_num = 3
if end == '國貿(mào)':
????end_num = 4
if end == '永安里':
????end_num = 5
if end == '建國門':
????end_num = 6
if end == '東單':
????end_num = 7
if end == '王府井':
????end_num = 8
if end == '天安門東':
????end_num = 9
if end == '天安門西':
????end_num = 10
if end == '西單':
????end_num = 11
if end == '復(fù)興路':
????end_num = 12
if end == '南禮士路':
????end_num = 13
if end == '木樨地':
????end_num = 14
fangxiang = ''
zou_num = 0
if start_num == end_num:
????print("現(xiàn)在出站")
if start_num < end_num:
????fangxiang = '右'
????zou_num = end_num - start_num
????a = 0
????while a < zou_num:
????????print(fangxiang+'走1站') #一定要4個空格
????????a = a + 1
if start_num > end_num:
????fangxiang = '左'
????zou_num = start_num - end_num
????a = 0
????while a < zou_num:
????????print(fangxiang+'走1站') #一定要4個空格
????????a = a + 1
- 14個
if是不是很惡心,沒關(guān)系后面會介紹如何簡化處理這類問題/
試一下 在線Python
目錄
金哥Python教程P0變量與運算
金哥Python教程P1循環(huán)與控制
金哥Python教程P2邏輯思維1
金哥Python教程P3邏輯思維2
