《金哥百变Python零基础教程1》~循环与控制

本章知识点 :> 循环与控制

很多人跟我说,上一章的知识点已经忘记的差不多了,那我再贴一遍知识图吧
p0总结在线看

语法

编程可以从这些基本的招式开始练。


复习:基本定律

现在复习一下编程第一定律:在Python代码里,出现的所有东西不是 变量 就是 运算符
Python编程基本能力:可以识别Python代码里,哪些是变量,哪些是运算

myname = '阿金'
print('我是‘ + myname)
codeage = 20
print('我已编程')
print(codeage)
print('年')

我们可以识别到:

  • 变量 myname "阿金" ’我是‘ codeage 20 ’我已编程‘ '年'
  • 运算 = + (字符串相加) print
  • 易错点:在打印codeage的时候,不能用 print('我已编程' + codeage + '年') ,你知道这是为什么吗?
  • 因为 '我已编程'是字符串变量 codeage 是整数,字符串和整数不能直接做 +
    试一下 在线Python

把几个运算符合起来比较难看懂

字符串 不能 和整数相加,有没有一种运算可以把整数转成字符串呢?如果可以转化,不就可以直接相加了吗,答案是肯定的。

codeage = 20
s_codeage = str(codeage)
试一下 在线Python

  • str运算(学名是str函数),可以把一个整数 codeage 转化成字符串 s_codeage, 此时的 s_cogeage值就是 "20"
类型转化 语法 例子
其他类型转字符串 str str(123)
转整型 int int("123")
转浮点型 float float("3.14")
转布尔型(后面细讲) bool bool(1)
  • 现在咱们只要知道有这种类型转化的办法就可以,需要时可以回来查这个表
  • 现在可以改写一下之前的代码
    codeage = 20
    print('我已编程' + str(codeage) + '年')

我们注意到,多个变量一层层的运算连在一起的时候,理解起来会有困难,解决办法就是把复杂的算式一步步拆解开来理解:

print('我已编程' + str(codeage) + '年')

a = ’我已编程'
b = str(codeage)
c = a + b
d = '年'
e = c + d
print(e)

  • 当然这里不是真的让你把这个算式写这么多步,我们只要在头脑里运行即可,其实随着我们对代码越来越熟悉,这个过程也会变得很自然
    试一下 在线Python

比较运算

两个变量进行 比较 是非常本能的一种 运算

a = 1
b = 2
b > a

  • b > a 表示的不是 b 大于 a这个结果,而是比较计算 b 大于 a吗?,这样说不太好理解的话,可以把代码稍微改一下

a = 1
b = 2
c = b > a
print(c)
d = b < a
print(d)

  • 凡是运算都有结果,c 等于 b > a 比较计算完的结果。在这个例子里,c 的值为 True;
  • b < a 也是一个运算,d 的值为 False;
  • 在Python里,TrueFalse 是布尔类型的变量,分别表示
  • 比较运算的结果只能是 布尔类型,b 大于 a吗? (True); b 小于a吗?( False)
    试一下 在线Python

除了 > < 还有别的比较运算

操作符 含义 例子
== 等于 1 == 1 #True
!= 不等于 1 != 2 #True
< 小于 1 < 2 #True
> 大于 1 > 2 #False
<= 小于等于 1 <= 1 #True
>= 大于等于 1 >= 1 #True
  • 易错点:布尔值 TrueFalse的首字母是大写的,truefalse 不是布尔型
    a = true #会报错
    a = True #对

  • 易错点:判断两个变量相等用 == , 千万不要用 = (=是赋值运算)
    1 == 1 #正确
    1 = 1 #会报错
    试一下 在线Python

  • 其他数据类型也都可以比较运算
    print('jinge' == 'jinge')
    print('abc' >= 'cda')
    print(True == False)
    print(1 == 1.0)
    print(10 != 'dog')
    试一下 在线Python

  • 布尔类型之间还可以进行布尔运算(不是比较);and or not 运算结果还是 布尔类型

    布尔运算

  • 举几个栗子:
    print(2 > 1 and 3 > 1) #为True
    print(20 < 50 or 20 > 50) #为True

  • 这两个表达式里,先进行比较运算,再进行了布尔运算
    试一下 在线Python


while 循环

我们注意到代码是顺序执行的。比如:
a = 0
a = a + 1
a = a + 1
a = a + 1
a = a + 1
print(a) #结果为4

  • 再看一个栗子:


    北京地铁1号线

print('右走1站')
print('右走1站')
print('右走1站')
print('右走1站')
#一共走了4站
试一下 在线Python

  • 上面2个程序的共同点是把 相同的运算 做了多遍,人话:执行重复的运算
  • 这种情况,我们可以用 while 循环来写

while 循环的语法:

while循环

  • 这个语法比较复杂,我会3个方面来解释一下
  • 条件 是一个布尔运算表达式,比如 a < 4 表示条件是 a 小于4的时候,重复执行下面的语句
  • 条件 后面要写一个 : (英文的冒号), 另起一行表示循环执行的语句,要用 四个空格 开头
  • 现在换一种图示的方法:


    while循环
  • 要用4个空格把 循环语句块 缩进一级,表达的意思就是这块是循环内的代码
  • : 表达的意思是,条件 写完了,接下来的是 循环语句块

  • a = a + 1 用循环来实现一遍
    a = 0
    a = a + 1
    a = a + 1
    a = a + 1
    a = a + 1
    print(a) #结果为4

  • 套用语法:
    a = 0 #之前语句
    while a < 4:
        a = a + 1
    print(a) #之后语句
    试一下 在线Python


  • 初学者写 循环 语句要有循环思维
    循环思维
  • 所谓循环思维,就是每次循环不要把条件判断忘记了
  • 或者我们可以换一个图来解释:


    循环流程图
  • 现在改写一下 地铁循环
    print('右走1站')
    print('右走1站')
    print('右走1站')
    print('右走1站')
    #一共走了4站

  • 套用循环语法
    a = 0
    while a < 4:
        print('右走1站')
        a = a + 1
    试一下 在线Python

  • 易错点:在循环体内,容易把控制循环条件的变量 漏掉,比如:
    a = 0
    while a < 4:
        print('右走1站')
    试一下 在线Python

  • 这个写法的错误可以结合循环流程图看一下,我们会发现每次做 while 条件 a < 4 判断时
  • a 的值一直是 0(因为没有在寻循环体改变它) 所以 条件 一直为 True
  • 这样,循环会一直执行(也就是通常说的死循环)

if 分支
  • 循环 是初学编程最难的知识点,如果理解了循环,我们再来看if 会轻松很多
  • 我们先看看 一种循环的情况

a = 4
while a < 4:
    print("右走1站")

  • 我们读一下这段代码,会发现 循环体 根本没机会执行,因为 条件 一开始就是 False
    试一下 在线Python

a = 0
while a < 1:
    print("右走1站")
    a = a + 1

  • 再仔细读读一下这一段循环,我们发现循环体 只会执行1遍,因为执行1遍之后a就为1了,条件False
    试一下 在线Python

  • 现在可以这么说,我们对 循环 的理解更进一步了,原来 循环 是可以执行 0 -> ∞(无穷) 次重复


if 分支
  • 对于只要执行 01 次的情况,换句话说,只要判断执行或不执行的情况,可以用 if 语句
    if流程图

    if语法
  • if (如果)后面的条件为 True 就执行,否则,不执行
  • : 条件 四个空格 语句块 这几个的意思和循环里是一样的
  • 现在我们把例子改写一下:

a = 0
if a < 1:
    print("右走1站")
#其他语句

  • 可以用中文来理解为:如果(if) a 小于 1,就 print("右走1站")
    试一下 在线Python

综合运用
  • while 循环 和 if 分支 没有改变程序是顺序执行的这一点,不过他们可以控制某些语句 执行或不执行
  • 可以控制 重复执行的次数
  • 我们大概又讲了20多个简单重复 的定式,你可以练一遍再开始我们的综合运用
    试一下 在线Python
  • 不要小看 条件控制 ,在这两个工具的帮助下,我们的程序才变得智能起来
  • 继续上一章的问题:

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

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

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

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

  • 思考下怎么写?
  • 还记得 ”王府井右行乘客问路回答算法“ 吗?
    start = '王府井'
    start_num = 8
    end = '西单'
    end_num = 11
    fangxiang = '右'
    zou_num = end_num - start_num
    print('往' + fangxiang + '走'+ str(zou_num) + '站‘)
  • 我把最后一步用 str 运算做了类型转化
  • 因为乘客可能往左走,要完整的实现,还得写一个程序 ”王府井左行乘客问路回答算法“
    start = '王府井'
    start_num = 8
    end = '东单'
    end_num = 7
    fangxiang = '左'
    zou_num = start_num - end_num
    print('往' + fangxiang + '走' + str(zou_num) + '站')
  • 继续,如果乘客要去的是 "王府井"(当前站),我还得再写一个程序 "王府井当站乘客问路回答算法"
  • 我去~ 这程序太不智能了?对吧

综合运用
  • 应用 ifwhile 我们完全可以把这3个程序合成一个, 叫 "王府井乘客问路回答算法"
  • 思路
  • 这个编程思路的核心要点是把问题进行分解
  • 针对这个场景,我们可以把

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

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

  • 命名为新运算 指路回答法

打印 "现在出站"

  • 命名为新运算 当前站指路法

  • 现在,我们假设这两个方法有现成代码块(熟悉这个名词吧),来整理下思路

    image.png

  • 再稍微进一步,就是主程序的代码了:


    image.png

start = '王府井'
start_num = 8
end = '?' #具体执行时填写
end_num = ? #具体执行时填写
fangxiang = ''
zou_num = 0
if start_num == end_num:
    当前站指路法

if start_num < end_num:
    fangxiang = '右'
    zou_num = end_num - start_num
    指路回答法

if start_num > end_num:
    fangxiang = '左'
    zou_num = start_num - end_num
    指路回答法

  • 现在我们再整理下 当前站指路法指路回答法
    当前站指路法
指路回答法
  • 现在可以写出完整的代码:

start = '王府井'
start_num = 8
end = '?' #具体执行时填写
end_num = ? #具体执行时填写
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


下一章会先复习 循环if 的知识,不用担心今天的新知识太多~

p1 知识点总结:
p1总结在线看

p1 知识点总结

目录

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

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

推荐阅读更多精彩内容