《金哥百變Python零基礎(chǔ)教程2》~邏輯思維1

本章知識點 :> 邏輯思維


這節(jié)課會比較輕松

有人說第1章和第2章的內(nèi)容太豐富了,腦子要擠爆了。好消息是 變量運算 循環(huán)控制; 掌握這4個知識我們已經(jīng)可以寫世界上絕大部分的程序了。(后面的知識不過是現(xiàn)有知識的優(yōu)化而已)

所以第3章和第4章講 邏輯思維 (有沒有感覺到邏輯思維才是真正的核心), 同時也是對 第1章和第2章的復(fù)習(xí)。

image.png

錢包的變化

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


錢包
  • 需求描述
#下面的話描述了小明最近3天的消費情況
#剛開始他的錢包有 100元零5毛
#第一天,花了30元
#第二天,收入10元,花了20元
#第三天,花了25元
# 請用Python程序來表示這個過程~
  • 思路
  • 從消費情況的描述中我們看到 30 10 20 這樣的消費變量
  • 我們設(shè)計一個 錢包變量,(思考一下:什么數(shù)據(jù)類型合適?);錢包變量 每一天都在變化,不是減少,就是增加
image.png
  • 設(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算法
  • 我們確保自己理解了BMI的含義
  • 現(xiàn)在先開始取名,女神身材判定器BMI算法 (注意:如果取出了名字,我們就應(yīng)該知道這兩個代碼塊的輸入和輸出)
  • 女神身材判定器 輸入 體重,身高 輸出 減肥 ,不減肥 (過重或肥胖就輸出減肥)
  • BMI算法 輸入 體重,身高 輸出 過輕,正常,過重,肥胖
image.png
  • 易錯點:判斷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號線
image.png
  • 問題:我們還是用簡化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á),就很接近程序了
image.png
  • 代碼

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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容