《金哥百变Python零基础教程2》~逻辑思维1

本章知识点 :> 逻辑思维


这节课会比较轻松

有人说第1章和第2章的内容太丰富了,脑子要挤爆了。好消息是 变量运算 循环控制; 掌握这4个知识我们已经可以写世界上绝大部分的程序了。(后面的知识不过是现有知识的优化而已)

所以第3章和第4章讲 逻辑思维 (有没有感觉到逻辑思维才是真正的核心), 同时也是对 第1章和第2章的复习。

image.png

钱包的变化

第一个故事是关于钱包的,尝试用Python来记录小明的钱包


钱包
  • 需求描述
#下面的话描述了小明最近3天的消费情况
#刚开始他的钱包有 100元零5毛
#第一天,花了30元
#第二天,收入10元,花了20元
#第三天,花了25元
# 请用Python程序来表示这个过程~
  • 思路
  • 从消费情况的描述中我们看到 30 10 20 这样的消费变量
  • 我们设计一个 钱包变量,(思考一下:什么数据类型合适?);钱包变量 每一天都在变化,不是减少,就是增加
image.png
  • 设计钱包变量名: 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


书店打折了

随着钱包 的变化,我们也感受到了 变量变化

  • 我们来到一个书店,来看看书店的场景~
假如一本书的封面标价是24.95美元,书店打六折。第一本运费花费3美元,后续每增加一本的运费是75美分。问买60本一共花费多少钱呢?
  • 为什么我们每个思路都要有 输入 输出 呢?
  • 在编程的开始阶段,我们要熟悉去设计,实现一个小的功能代码块。比如上述的书店场景,可以取名 该书买N本总花费计算器
  • 我们给代码段取名,有2个好处,1是这个名字限定了它的功能,也就意味着整理思路时我可以用名字代表它,而不用关心细节
  • 2是既然功能这么明确,其他代码只需要关心它的输入 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
#请问根据 BMI 指数,女神需要减肥吗?
  • 这个问题看起来就更加实际了,而且埋藏了一个机关,就是描述里说的 BMI
  • 在实际问题中,我们需要先去学习这个新的知识 BMI (并非编程知识,是实际知识)
  • 我们可以百度一下
BMI算法
  • 我们确保自己理解了BMI的含义
  • 现在先开始取名,女神身材判定器BMI算法 (注意:如果取出了名字,我们就应该知道这两个代码块的输入和输出)
  • 女神身材判定器 输入 体重,身高 输出 减肥 ,不减肥 (过重或肥胖就输出减肥)
  • BMI算法 输入 体重,身高 输出 过轻,正常,过重,肥胖
image.png
  • 易错点:判断BMI指数为过重,应该用 BMI指数 == "过重"(比较运算)
  • 试一下编程
    height = 1.62
    weight = 55
    bmi = ‘’ #不知道先为空
    "BMI算法"
    if bmi == "过重" or bmi == ”肥胖“: #还记得比较运算和布尔运算吗,== or : 可以看第二章来复习
        print("减肥")
    if bmi == "过轻" or bmi == ”正常“: #还记得比较运算和布尔运算吗,== or : 可以看第二章来复习
        print("不减肥")
  • 把逻辑分 代码块 会让每一块更加容易编写!

  • 现在重点攻克 BMI算法

    image.png

  • 尝试用编程来写

height = 1.62
weight = 55
bmi = ‘’ #不知道先为空

#"BMI算法"
bmi_zhishu = 0#初始值为0 (注意这里的指数不要取名为 bmi 不要和之前的重复,因为数据不一样)
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 : 可以看第二章来复习
    print("减肥")
if bmi == "过轻" or bmi == ”正常“: #还记得比较运算和布尔运算吗,== or : 可以看第二章来复习
    print("不减肥")

  • 易错点:bmi 在代码里是bmi描述。bmi_zhishu 是浮点类型的指数值 (一定主要不要重名,会导致变量覆盖)
  • 注意:一个变量只能表示一个含义
    试一下 在线Python

地铁1号线
image.png
  • 问题:我们还是用简化1号线地铁问题,假设只为 王府井(8号站)写一个Python程序,实现路人问路,并且通过打印

"右走1站"
"右走1站"
...

或者
"左走1站"
"左走1站"
...

来指路。(考虑特殊情况如果 用户要去的就是 王府井 站,那么请打印 "现在出站")

  • 最新要求:用户只要告知站名(如 ”西单“)就可以问路,不需要告诉站号(如 11)
  • 思考一下

  • 如果只知道 站名,我们如何用Python编程得到站号呢(注意:只有得到站号才可以算走几站)?

  • 不妨先起个名 "站名转站号算法"

  • 输入:站名 输出 :站号

  • 可以继承之前的代码:

start = '王府井'
start_num = 8
end = '?' #具体执行时填写
end_num = 0 #默认是0,请用算法计算

#"站名转站号算法"

fangxiang = ''
zou_num = 0
if start_num == end_num:
    print("现在出站")

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

  • "站名转站号算法"
  • 看下图,如果 站名是“王府井” 站号是 8,依次可以推,如果站名 “西单” 站号 11 .... ...
  • 一旦思路能转到 如果 ...这样的表达,就很接近程序了
image.png
  • 代码

start = '王府井'
start_num = 8
end = '?' #具体执行时填写
end_num = 0 #默认是0,请用算法计算

#"站名转站号算法"
if end == '四惠东':
    end_num = 1
if end == '四惠':
    end_num = 2
if end == '大望路':
    end_num = 3
if end == '国贸':
    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 == '复兴路':
    end_num = 12
if end == '南礼士路':
    end_num = 13
if end == '木樨地':
    end_num = 14

fangxiang = ''
zou_num = 0
if start_num == end_num:
    print("现在出站")

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是不是很恶心,没关系后面会介绍如何简化处理这类问题/
    试一下 在线Python

目录

金哥Python教程P0变量与运算
金哥Python教程P1循环与控制
金哥Python教程P2逻辑思维1
金哥Python教程P3逻辑思维2

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,864评论 6 494
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,175评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,401评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,170评论 1 286
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,276评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,364评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,401评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,179评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,604评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,902评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,070评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,751评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,380评论 3 319
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,077评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,312评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,924评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,957评论 2 351