每日反馈

讲的很清楚,很易懂,教学风格很轻松,让我们乐于投入学习,很棒很棒
老师讲的很清楚,而且笔记做得非常
老师很棒!

day02知识回顾

Day03 循环语句 - 图1

练习中出现的两个问题:

1.python解释器的配置
情况: 打开老师的代码,右键没有run按钮,证明解释器没有配置
点击file >>> settings,唤出如下界面选择要使用的解释器即可
image.png
如果解释器列表为空
点击解释器下拉菜单旁边的小齿轮点击add进行添加即可
image.png
添加过程和创建工程时一致
2.insert键
情况说明: pycharm中光标变粗,输入数据后会覆盖后边的内容
image.png
只要点击键盘上的ins 或者insert键即可
如果不知道自己键盘上insert键在哪里,直接唤出软键盘点击ins即可
image.png

补01-if语句的嵌套[掌握]

  • 注意: if语句的嵌套主要是为了简化逻辑,并不是非用不可,一般if语句的嵌套会让if判断的条件变得简单. ```python

    if语句的嵌套就是正在if语句所控制的代码块之中,再书写一个if语句

“”” 分支语句嵌套的格式: if 外层条件语句: 外层条件语句执行时的代码块 if 内层条件语句: 内层条件语句成立时执行的代码块 else: 外层条件不成立时执行的代码块 if 内层条件语句: 内层条件语句成立时执行的代码块

注意: 只有外层条件成立时或不成立,才能执行对应的内层的分支语句,内层分支语句是否执行,由外层条件决定.

“””

需求1: 取地铁站安检, 要保证有票(ticket) 并且刀子小于9cm(knife_length) 保证了这两点就可以上车,否则只能回家了

分析: 首先刀子不能大于9cm 否则你有票也上不去

如果刀子不大于9cm 有票我们就能上车,否则上不去

knife_length = 7 ticket = 0

if knife_length <= 9: print(‘可以过安检了’)

  1. # 如果通过了安检,我们就要验票了
  2. if ticket == 1:
  3. print('赶紧上车吧,回家真开心!')
  4. else:
  5. print('忘记买票了,只能走回家了!')

else: print(‘不能通过安检’)

需求2: 输入一个整数, 判断其为正奇数,正偶数,负奇数还是负偶数.

num = int(input(‘请输入您要判断的数字:’))

if num > 0: print(‘正’) if num % 2 == 0: print(‘偶数’) else: print(‘奇数’) elif num < 0: print(‘负’) if num % 2 == 0: print(‘偶数’) else: print(‘奇数’) else: print(‘您输入的数字是0’)

<a name="iFGIG"></a>
# 补02-三目运算符[了解]
```python
# 目: 就是参与运算符的值
# 三目运算(三元运算)符,就是有三个值参与运算

# python中三目运算符的格式: 条件成立时返回的结果 if 条件 else 条件不成立时返回的结果

# 需求: 有两个变量  a 和 b  打印 a 和b 中较大的值

a = 5
b = 9

# 分支语句
# if a > b:
#     print(a)
# else:
#     print(b)

# 三目运算符
result = a if a > b else b
print(result)

练习: 判断数字是奇数还是偶数,如果是奇数就返回结果为”奇数”, 如果是偶数,就返回结果为”偶数”.

result = '偶数' if num % 2 == 0 else '奇数'
print(result)

00-今日知识内容

  1. while循环
  2. 循环嵌套
  3. 循环的应用
    1. 打印图形
    2. 九九乘法表
  4. for循环
  5. 猜拳游戏案例

01-循环的体验[了解]

# 循环语句: 当满足条件时,重复执行相同或者相似的代码
# 在python中,构建循环结构的关键字有两个, while  for

# 体验循环
# print('我老我错了...')
# print('我老我错了...')
# print('我老我错了...')
# print('我老我错了...')
# ...


# 如果没有循环,则反复执行多次相同或相似的代码比较麻烦

# 使用循环
i = 0
while i < 10000:
    print('老婆我错了...')
    print('你错在哪了...')
    print('我错在....')
    print('还有呢?????')
    print('我直接跪榴莲吧...')
    i += 1

print('买个包我就原谅你....')

# 循环可以大幅度提高开发效率,但是不能提高执行效率

02-while语句详解[掌握]

  • while 循环的必备要素: 1. while 关键字 2. 循环条件 3. 循环体 ```python “”” while循环的格式:

while 条件语句: 条件成立时循环执行的代码1 条件成立时循环执行的代码2 …. “””

需求: 输出从1-5的5个数字,使用while完成

1.定义循环变量,用于配合循环变量控制循环次数,

i = 1

2.设置循环条件

while i <= 5:

3.执行循环中的代码

print(i)

4.循环变量自增

i += 1

print(‘程序结束’)

表述流程:

设置循环变量的起始值,当满足条件<=5的时候,进入循环体执行代码并让循环变量自增,当循环条件不满足时,跳出循环,继续执行后续代码

while循环一定需要循环变量么???? 不需要

while 循环的必备要素: 1. while 关键字 2. 循环条件 3. 循环体

除了循环变量外,时间,进程状态,对象个数,生命周期等都可以控制循环.

循环变量如果没有,循环条件一直成立,则会出现无限循环.

while True: print(‘1’)

这种循环条件恒成立的情况,叫做死循环,或者无限循环

死循环是程序的一种执行状态,不一定是bug

我们遇到的死循环有很多: 玩游戏,手机推送

练习: 使用循环输出10次"我爱学习".
```python
i = 0
while i < 10:
    print('我爱学习!')
    i += 1

03-while应用:1-100的累加和[掌握]

# 使用while快速计算出1-100的累加和
"""
如果我想计算1-100的累加和 我应该怎么办???
1. 先计算1+2将结果记录下来
2. 将上一次计算的结果加上3,并记录新的结果
3. 将上一次计算的结果加上4,并记录新的结果
4. 将上一次计算的结果加上5,并记录新的结果
....
99. 将上一次计算的结果加上100,并记录新的结果,这个结果就是最终的得数
"""

# 分析:
# 1.我们要使用数字进行相加,那么我们可以使用循环变量作为数字,进行累加
# 2.每一次相加结束后,都将循环变量自增
# 3.我们要使用一个变量记录每一次相加的结果,并参与下一次累加计算(这个变量,我们称之为累加器)

# 第一步: 我们要相加的数字是1-100 多以第一步我们先输出1-100 的整数
# # 1.定义循环变量
# i = 1
# # 2.设置循环条件
# while i <= 100:
# # 3.执行循环代码
#     print(i)
# # 4.对循环变量自增
#     i += 1

# 第二步: 将数字全部累加在一起,需要有一个变量保存其过程中累加的结果
# 1.定义循环变量
i = 1
# 创建一个累加器,保存每一次循环的累加结果
sum1 = 0
# 2.设置循环条件
while i <= 5:
# 3.执行循环代码
    sum1 = i + sum1
# 4.对循环变量自增
    i += 1

# 输出结果
print(sum1)

流程图
Day03 循环语句 - 图6
练习: 计算1-20的累乘积.

# 练习:计算1-20的累乘积
# 创建循环变量
i = 1
# 创建一个累乘器,用来保存累乘期间的计算结果
mul = 1
# 设置循环条件
while i <= 20:
# 累乘数据
    mul *= i
# 循环变量自增
    i += 1

print(mul)

# 怎样确定累加器的初始值??? 唯一标准,就是初始值参与运算时不影响最终的计算结果

04-while应用:1-100的偶数累加和[掌握]

# 需求: 使用while循环,快速计算1-100的偶数累加和

# 分析: 计算累加和和偶数累加和,为的区别是,要判断就行,该判断在哪写????   在循环体当中

# 1.创建循环变量
i = 1
# 2.设置循环条件和累加器
sum1 = 0
while i <= 100:
    # 3.判断奇偶性,并累加
    if i % 2 == 0:
        sum1 += i
    # 4.循环变量自增
    i += 1

print(sum1)  # 2550

05-while循环的循环的循环嵌套[熟悉]

  • 循环嵌套时,内层循环和外层循环的循环变量名称不能相同
  • 循环的嵌套会极大增加代码的执行压力,慎用
  • 在正常开发中 循环嵌套的次数不会超过3层 ```python

    循环嵌套:就是在循环的循环体重,书写了另外的一个循环

需求: 我们要做四组动作,每组动作如下:

跑三圈, 做5个蹲起

分析: 如果做4组动作,每组动作相同,可以使用循环, 跑3圈, 5个蹲起也可以用循环

第一步: 先做一组动作

# 跑3圈

i = 1

while i <= 3:

print(f’我跑完了第{i}圈’)

i += 1

# 做5个蹲起

i = 1

while i <= 5:

print(f’我做了{i}个蹲起’)

i += 1

第二步:我们要做四组运动

i = 1

while i <= 4:

print(f’第{i}组动作已经完成了’)

i += 1

第三步: 将每一组动作的细节替换到第二步内

注意: 我们内层循环中循环变量为i 外层循环中的循环变量就不能叫i 了

错误原因: 内存循环同时修改了外层循环的循环变量,导致无法正确控制循环次数

修改方式: 将内外层循环的循环变量分别命名即可

解释为什么内层循环变量名称可以相同,因为内层循环变量使用前先进行了赋值.

j = 1 while j <= 4:

# 跑3圈
i = 1
while i <= 3:
    print(f'我跑完了第{i}圈')
    i += 1
# 做5个蹲起
i = 1
while i <= 5:
    print(f'我做了{i}个蹲起')
    i += 1
print(f'第{j}组动作已经完成了')
j += 1
<a name="RKzXp"></a>
# 06-print函数详解[掌握]
```python
# print函数是用来打印数据的

# print('hello world!!!')
# print('hello bigdata!!!')
# print('hello chuanzhi!!!')

# 思考:
# 1. 为什么会分三行打印?  print函数每次打印结束后,都会执行一次换行操作.
# 2. 我们如何在打印时,让字符串换行???  \n(\是enter上方的斜杠)

# 需求: 打印<静夜思> 每打印依据,执行一次换行操作
# print('床前明月光,\n疑是地上霜.\n举头望明月,\n低头思故乡.')

# print在哪里执行的\n呢?我们怎样修改换行符呢??
# print(self, *args, sep=' ', end='\n', file=None)
# sep 是间隔符, 间隔符默认为空格  end 是结束符,结束符默认是换行

# 修改换行符 \t是制表位一般情况下等于四个空格,相当于你键盘上的tab键
print('传智教育好,', end='\t')
print('工作真好找,', end='\t')
print('找到就高薪,', end='\t')
print('回家养二老.')

# 结果: 传智教育好,    工作真好找,    找到就高薪,    回家养二老.

# 如果想让上方的所有内容输出到一行,没有任何结束符效果
print('传智教育好,', end='')
print('工作真好找,', end='')
print('找到就高薪,', end='')
print('回家养二老.')

# 结果: 传智教育好,工作真好找,找到就高薪,回家养二老.

# 结论: print会在打印结束之后,自动输出一次结束符,默认的结束符就是换行符,我们可以使用end=""的形式手动修改

# 修改间隔符
print('传智', '教育', '黑马', '程序员')  # 传智 教育 黑马 程序员

# 需求: 一次打印多个内容时,中间用$进行分隔
print('阿奇', '毛毛', '天天', '小丽', sep='$') # 阿奇$毛毛$天天$小丽


# 补充  [了解]
# 在字符串中如何输出\
# \在字符串中的含义叫做转义字符,他是用于将其他字符进行转译. 例如t就是一个字母  \t 就是制表位
# 如果我们想输出\就要使用另外一个转译字符,防止其转译
print('\\')
# 需求: 打印: http:\\www.baidu.com
print('http:\\\\www.baidu.com')

07-循环嵌套应用:打印矩形[熟悉]

  • 注意:内层循环时打印一行数据的, 外层循环时打印多少行
  • 所以:内层循环控制打印的列数, 外层循环控制打印的行数 ```python

    需求: 使用while循环,快速打印矩形

    “””





“””

第一步: 打印一行* 一共 5个 使用循环

循环变量从几开始? 从几开始不重要,重要的是打印5次

i = 0 while i < 5:

# 如果想让打印的*在一行显示,需要对结束符进行修改
print('*', end=' ')
i += 1

结果: *

第二步: 执行五次打印一行数据的操作

i = 0 while i < 5: print(‘打印一行数据’) i += 1

第三步: 将第二步中打印的内容换成打印*

此时外层循环的循环变量可以定义成与内层循环不一样的变量名称

j = 0 while j < 5:

# print('打印一行数据')
i = 0
while i < 5:
    # 如果想让打印的*在一行显示,需要对结束符进行修改
    print('*', end=' ')
    i += 1
# 需要在此位置对于打印内容进行换行,因为每次内层循环执行完成后都会来到这里,这个时机正好是一行内容打印完成
print() # 括号内,什么也不用写,因为其结束符默认就是换行符
j += 1

结果: *

原因: 我们将打印的结束符都替换为了空格,所以没有了换行操作,我们需要在每一行打印完成后,执行一次换行操作

<a name="XhwF8"></a>
# 08-循环嵌套应用:打印三角形[熟悉]
```python
# 使用循环嵌套,快速打印一个三角形
"""
1: *
2: * *
3: * * *
4: * * * *
5: * * * * *
"""

# 第一步: 我们打印一行 *  是谁控制* 的数量
i = 0
while i < 3:
    print('*', end=' ')
    i += 1

# 如果 我们要修改打印*的数量需要修改谁?????  循环变量的初始值 循环条件
# 我选择修改循环条件: 想打印多少个* 就把小于号后边的数字改成几

# 第二步: 三角形一共5行,所以我们需要打印五行*
j = 1
while j <= 5:
    print('打印一行内容')
    j += 1

# 第三步: 将第一步中打印的内容添加到第二步中

j = 1  #j就是行号
while j <= 5:
    i = 0
    # 此处可以控制每一行打印的* 的数量
    # 我们通过分析发现每一行打印的数量,正好就是行号
    while i < j:
        print('*', end=' ')
        i += 1
    # 每一行内容打印完成后,需要换行
    print()
    j += 1

练习: 打印一个倒三角形

"""           j    *
* * * * *     0列  5个
* * * *       1列  4个
* * *         2    3
* *           3    2
*             4    1

结论:  j + *  = 5   >>>> * = 5-j
"""

# 第一步: 先将正三角形的代码写出来

j = 0
while j < 5:
    i = 0
    while i < j + 1:
        print('*', end=" ")
        i += 1
    print()
    j += 1

# 第二步: 更具正三角形的代码,分析*的数量和列的关系修改代码
# 分析:
j = 0
while j < 5:
    i = 0
    while i < 5 - j:
        print('*', end=" ")
        i += 1
    print()
    j += 1

09-for循环介绍[掌握]

  • 构造无限循环一般使用while
  • 有明确的循环跳出条件的一般使用while
  • 除上述情况外都建议使用for
  • for在开发中的使用场景远大于while ```python

    for循环也是循环结构的一种,一般和容器类型(一个变量中保存了多个数据,这种数据就是容器类型,例如字符串)配合使用

    “”” 格式: for 临时变量 in 容器类型: 循环体

循环遍历: 依次从容器类型中获取每一个值

for 循环循环的逻辑: 通过for关键字构造循环,每次从容器类型中获取一个元素,赋值给临时变量,如果容器内的元素全部提取完成,则结束循环 所以:for循环中,容器内元素的个数,决定了循环的次数 “””

需求: 使用for循环遍历字符串

str1 = ‘itheima’ for i in str1: print(i)

for循环的优点:

1.语法简洁,且不容易出错(因为不需要循环变量控制循环次数)

2.从容器中遍历数据,不需要构造数据,可以直接取用

for循环的缺点:

1.for循环循环多少次,就需要有一个指定长度的容器,如果循环次数非常多,消耗性能(容器比较大) , 构造死循环一般使用while

2.不以循环条件为循环终止规则,所以有明确循环结束条件的循环结构建议要使用while

在所有情况下 while 和for 都是可以互相转换的,但是我们要选择更合适的语法结构

<a name="y8u8O"></a>
# 10-range函数的介绍[掌握]
```python
# range函数就是按照一定规则获取范围内的整数集合的函数
# 使用格式: range(起始位置, 终止位置, 步长)

# 需求: 使用range函数获取从1-10的整数集合
# 使用list函数可以查看range中都有哪些数值

# 证明: 起始位置到终止位置的范围是一个左闭右开区间,因为包含起始位置不包含结束位置
# print(list(range(1, 10, 1))) # [1, 2, 3, 4, 5, 6, 7, 8, 9]

print(list(range(1, 11, 1)))  # [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

# 什么是步长??? 步长就是相邻两个数字的差
print(list(range(1, 11, 2)))

# 在range函数中步长可以省略,默认步长是1
print(list(range(1, 11)))  # [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

Day03 循环语句 - 图7

11-for循环的应用[熟练使用]

# 需求1: 使用for循环计算1-100的累加和
# 第一步: 先将1-100打印出来
# for i in range(1,101):
# print(i)

# 第二步: 计算1-100的累加和,此时需要创建累加器
sum1 = 0
for i in range(1, 101):
    sum1 += i

print('1-100的累加和是:', sum1)

# 需求2: 使用for循环计算1-100的偶数累加和
sum2 = 0
for i in range(1, 101):
    if i % 2 == 0:
        sum2 += i
print('1-100的偶数累加和是:', sum2)


# 注意: 1. 在for循环的循环体之外不要使用临时变量
# 原因: 如果for循环遍历的容器为空容器,此时i尚未被定义.
# print(i)

for j in '':
    print(123)

# NameError: name 'j' is not defined
# 如果容器为空则j不会被定义
# print(j)

# 2. 临时变量是一个变量名称可以随意修改,修改为什么在循环体内用什么就可以了.

练习: 用for循环打印一个三角形.

# 使用循环嵌套,快速打印一个三角形
"""
1: *
2: * *
3: * * *
4: * * * *
5: * * * * *
"""

# 第一步: 使用for循环打印一行*

# 如果range的起始位置是0,则可以省略
# for i in range(5):
#     print('*', end=" ")

# 结果: * * * * *

# 第二步: 让第一步执行五次,打印5行
# for j in range(5):
#     for i in range(5):
#         print('*', end=" ")
#     # 内层循环执行一次,则打印一个换行符
#     print()

# 第三步: 让每一行打印的* 的数量和行数相等
for j in range(5):
    for i in range(j+1):
        print('*', end=" ")
    # 内层循环执行一次,则打印一个换行符
    print()

12-for循环实现九九乘法表[熟练使用]

"""
九九乘法表:
1*1=1
1*2=2 2*2=4
1*3=3 2*3=6 3*3=9
.....
.............................9*9=81
"""
# 分析: 乘法表中每一个公示的第一个数字就是列的序号, 第二个数字就是行的序号
# 得出的结论:
# 1.九九乘法表是一个直角三角形的阵列, 9行9列
# 2.每一个公式的第一个数字就是列的需要,第二个就是行的需要
# 3.每一个公式都是一个字符串

# 第一步: 打印一个9行9列的三角形
for i in range(9):
    for j in range(i + 1):
        print('*', end=' ')
    print()

# 第二步: 将每一个*输出的部分改为第几行第几列
for i in range(9):
    for j in range(i + 1):
        print(f'第{i + 1}行, 第{j + 1}列', end=' ')
    print()

# 第三步: 将字符串信息,改写为九九乘法表的公式
for i in range(9):
    for j in range(i + 1):
        # 将字符串修改为列号 * 行号 = 结果的格式
        # 如果使用空格当做结束符,公式无法对其,如果使用\t则可以对齐这就是制表位的作用.
        print(f'{j + 1} * {i + 1} = {(j + 1) * (i + 1)}', end='\t')
    print()

13-猜拳游戏的优化[熟悉]

  • 练习建议: 如果你不知道从何入手,建议
  1. 把老师的代码赋值过去运行一遍
  2. 把老师代码中的注释删掉,自行填补注释
  3. 把老师的代码删除,根据刚才填写的注释补全代码 ```python

    需求:

    1.让猜拳游戏循环进行

    2.让猜拳游戏计算得分,谁赢了就积一分,输了不扣分,平局不得分,也不扣分

    3.其中一方得分超过3分则退出游戏,并宣布胜利方

思考: 玩家和电脑的分数记录,应该在循环体内定义还是在循环体外定义???

导入random模块

import random

TODO: 2.创建两个变量,记录玩家和电脑的得分

如果我们数据需要累计变化,则需要放到循环体之外进行定义

computer_score = 0 palyer_score = 0

TODO: 1.将猜拳游戏的所有内容放入到循环当中

TODO: 4.使用循环条件控制游戏结束 双方都小于3时,才可以进入循环体

while palyer_score < 3 and computer_score < 3:

# 如果我们的数据需要每次循环都初始化,则放在循环体内定义

# 玩家出拳,用户键入
player = int(input('请输入您要输入的拳型:石头(1), 剪刀(2), 布(3)'))

# 电脑出拳, 随机出拳
computer = random.randint(1, 3)

# 比较拳型,宣布结果
if (player == 1 and computer == 3) or (player == 2 and computer == 1) or (player == 3 and computer ==2):
    print('电脑获胜')
    # TODO: 3.当玩家或电脑获胜时,分数要进行增加
    computer_score += 1
elif player == computer:
    print('平局')
else:
    print('玩家获胜')
    # TODO: 3.当玩家或电脑获胜时,分数要进行增加
    palyer_score += 1

print(f'电脑得分为{computer_score}, 玩家等分为{palyer_score}')

TODO: 5.宣布胜利方

只有一方获得胜利后,才能执行此代码

if palyer_score >= 3: print(‘玩家获得最终胜利’) else: print(‘电脑获得最终胜利’)

运行后语法无问题,但是结果不正确,证明你的逻辑出现了问题,需要断点调试

```

作业

03_循环作业.md
03_循环答案.md

作业提交

点击查看【jinshuju】

文件链接

百度云盘: 链接:https://pan.baidu.com/s/13TqhouBQ8h1lP2VFtQHgMw 提取码:lh3d
阿里云盘:「python+大数据79期基础」等文件 https://www.aliyundrive.com/s/G6iPqGFQgfJ