一、条件判断
1.1 条件判断语句(if 语句)
- 定义: 条件判断语句就是if语句
-
重点 需要注意条件判断语句和条件运算符的区别:
- 条件运算符是有返回结果的,而条件判断语句(if语句)是没有返回结果的。
-
重点 需要注意条件判断语句和条件运算符的区别:
- 条件运算符:
## 条件运算符
# 语法: 语句1 条件表达式 else 语句2
# 条件运算符执行时,会先对条件语句中的表达式进行求职判断
# 如果判断为 True ,则执行语句1,并返回执行结果
# 如果判断为 False,则执行语句2,并返回执行结果
max = a if a > b and a > c else c
print(max) # a
- 条件判断语句:
# 语法:
if 条件表达式:
代码块1
举个栗子:
x = int(input("请输入012三个数字"))
if x == 0:
print(111)
if x == 2:
print(222)
if x == 1:
print(333)
- 代码块中保存着一组代码,同一个代码块中的代码,要么都执行,要么都不执行;
- 代码块以缩进开始,直到代码恢复到之前的缩进级别时结束;
- 代码块就是一种为代码分组的的机制
1.2 input() 函数
- 作用: input() 函数主要用来获取用户的输入
- input()调用后,程序会立即暂停,等待用户输入
- 用户输入完成后,点击回车程序才会继续向下执行
- 用户输入完成以后,其所输入的内容会以返回值的形式返回。
- 特性1: input 接收到的数据一定是一个字符串,响应和 int 类型的数据进行转换,一定要进行类型转换。
a = input("请输入数字:")
print(type(a))
----------输出---------
请输入数字: 111
<class 'str'>
- 类型转换
- int() 将字符串强制转换为整数类型
b = int(input("请输入数字:"))
print(type(b))
---------输出---------
请输入数字: 222
<class 'int'>
- 特性2: input() 函数是阻塞的,阻塞程序的作用。如果不输入,后面的程序永远不执行。
print("开始录入信息")
name = input("请输入你的姓名:")
print(name)
-------输出-------
开始录入信息
请输入你的姓名:
1.3 if-else 语句 <非此即彼>
- 语法:
if 条件表达式 :
代码块1
else:
代码块2
- 执行过程:
- if-else 语句在执行时,先对if 后的条件表达式进行请求判断
- 如果为 True , 则执行 if 后的代码块1
- 如果为 False,则执行 else 后的代码块2
x = int(input("请输入012三个数字:"))
if x == 0:
print("1111")
else:
print("2222")
1.4 if-elif-else 语句
- 语法:
if 条件表达式1:
代码块1
elif 条件表达式2:
代码块2
else:
代码块3
-
执行流程:
- if-elif-else语句在执行时,会自上而下依次对条件表达式进行求值判断,
- 如果表达式的结果为True ,则执行当前代码块,然后语句结束;
- 如果表达式的结果为False ,则继续向下判断,直到找到 True 为止;
- 如果所有的表达式都为 False, 则执行 else 后的代码块。
总结: if-elif-else 中只会有一个代码块会执行。
案例分析:
salary = 40000
if salary > 30000:
print('有钱任性')
elif salary >= 20000:
print('解决温饱')
elif salary >= 10000:
print('月薪过万')
elif salary >= 5000:
print('新手小白')
else:
print('吃土吧')
-------输出------
有钱任性
特性: if-elif-else 条件流程是从上到下,按顺序执行的;如果前面的条件满足,后面的停止,不再进行判断。永远有一个满足条件。
补救方式:在条件表达式添加逻辑运算符,来提高代码严谨性。
value = 18000
if value >= 30000:
print("有钱任性")
elif value >= 5000 and value < 10000:
print("新手小白")
elif value >= 20000 and value < 30000:
print("解决温饱")
elif value >= 10000 and value < 20000:
print("月薪过万")
else:
print("吃土吧")
- 有了上面逻辑判断,这样不管elif条件判断位置如何变化,最终输出结果都一样。
二、while循环
2.1 while 语句
- 循环语句可以使指定的代码块重复指定的次数,循环语句分为2种: while 循环 和 for循环。
- 语法:
while 条件表达式:
代码块
else:
代码块
- 执行过程:
- 只要条件表达式结果为 True ,就执行代码块。
- 一直会无线循环,即死循环。直到条件表达式结果为 False ,循环才结束。
- while循环三要素:
- 设定一个初始值;
- 对初始值进行条件判断,增加一个条件语句,对初始值进行一个条件表达式的限制。
- 初始值的自增长。
举个栗子:
i = 0
while i < 5:
print(i)
i += 1 # i = i + 1
-----执行-----
0
1
2
3
4
可以看到,上面添加了上面初始值,和条件表达式限制之后,wile 循环不再进入死循环。
例题练习
- 求1-100内的所有的偶数相加
方法一:
(1) 首先获取 1-100以内的数
(2) 然后取出偶数
(3) 偶数相加
i = 0
j = 0
while i < 100:
# print(i)
i += 2
if i % 2 == 0:
j += i # 所有偶数相加之和
# print(j)
print(j)
方法二:直接取偶数相加
# 每个变量的值在内存中为:id , 内存地址,value 三部分。
# 上面比较 value % 2 == 0 ,换种思路,直接 让i=0, i=i+2,这样是不是直接就取的偶数
i = 0
j = 0
while i < 100:
i += 2 # 直接自增2 : 0,2,4,6,8……
j += i # 偶数相加
print(j)
--------输出--------
2550
- 打印 *, 每行5个,没排5个。
# print() 函数模式使用 \n 作为换行符。那么我们是不是可以,每打印5个,就换行一次,这样循环5次,就实现了:
i = 0
while i < 5:
print("*", end=' ')
print("*", end=' ')
print("*", end=' ')
print("*", end=' ')
print("*", end=' ')
print()
i += 1
# 这样可以实现,但是中间部分连续打印5次,都重复执行,也可以使用一个while循环来实现。
i = 0
while i < 5:
j = 0
while j < 5:
print("*", end=' ')
j += 1
print()
i += 1
------输出------
* * * * *
* * * * *
* * * * *
* * * * *
* * * * *
- 打印 下面图案
*
* *
* * *
* * * *
* * * * *
分析:每行打印多少个等于行号个数,且和上题种情况相似。只要判断每行打印的个数即可。
i=0,i行打印 i+1个。
i = 0
while i < 5:
j = 0
while j < i+1:
print("*", end=' ')
j += 1
print()
i += 1
-----输出----
*
* *
* * *
* * * *
* * * * *
- 打印下面图案
* * * * * i = 0 j < 5 # 从上题中得出的规律
* * * * i = 1 j < 4 # 那么打印4个,就是 j < 4,j<5-i
* * * i = 2 j < 3
* * i =3 j < 2
* i = 4 j <1
分析: i =0 ,j <5, i 加上 j 小于的数都等于5 ,即 j < 5-i,那么打印4行呢 ,i=1 ,j <4 ;3 行,i=2,j<3
i = 0
while i < 5:
j = 0 # j 重新赋值
while j >5-i:
print("*", end=' ')
print()
i += 1
--------输出--------
* * * * *
* * * *
* * *
* *
*
作业
- 求 1000 以内的水仙花数
科普:什么是水仙花数?
水仙花数,指一个3位数,它的每个位上的数字的3次冥之和等于它本身。例如:1^3 + 5^3 + 3^3=153
方法一:
思路:
1.有取值范围,因此可以采用while循环,水仙花数位三位数,定义初始值count=100
2.再根据规律,根据赋值运算符取出水仙花数的每个位数,百位整除,十位对100取余再对10整除,个位:先对100取余再对10取余即可得出个位。
count = 100
while count < 1000:
count += 1
x = int(count / 100)
y = int(count % 100 / 10)
z = int(count % 100 % 10)
if x < 10 and count == x**3 + y**3+ z**3:
print(x,y,z,"水仙花数:",count)
方法二:切片
思路:直接把水仙花数 i 看作一个字符串,根据索引取值再int()类型转换,根据公式计算,这样是不是更简单呢 ?
i = 100
while i < 1000:
a = str(i)
if int(a[0])**3 + int(a[1])**3 + int(a[2]) == i:
print(a)
i += 1
--------输出--------
1 5 3 水仙花数: 153
3 7 0 水仙花数: 370
3 7 1 水仙花数: 371
4 0 7 水仙花数: 407
2. 打印99乘法表
思路:嵌套循环
i = 1
while i < 10:
j = 1
while j < 1+i:
print('%d * %d = %d' % (j,i,j*i),end='\t')
j += 1
i += 1
print('\n')
---输出---
1 * 1 = 1
1 * 2 = 2 2 * 2 = 4
1 * 3 = 3 2 * 3 = 6 3 * 3 = 9
1 * 4 = 4 2 * 4 = 8 3 * 4 = 12 4 * 4 = 16
1 * 5 = 5 2 * 5 = 10 3 * 5 = 15 4 * 5 = 20 5 * 5 = 25
1 * 6 = 6 2 * 6 = 12 3 * 6 = 18 4 * 6 = 24 5 * 6 = 30 6 * 6 = 36
1 * 7 = 7 2 * 7 = 14 3 * 7 = 21 4 * 7 = 28 5 * 7 = 35 6 * 7 = 42 7 * 7 = 49
1 * 8 = 8 2 * 8 = 16 3 * 8 = 24 4 * 8 = 32 5 * 8 = 40 6 * 8 = 48 7 * 8 = 56 8 * 8 = 64
1 * 9 = 9 2 * 9 = 18 3 * 9 = 27 4 * 9 = 36 5 * 9 = 45 6 * 9 = 54 7 * 9 = 63 8 * 9 = 72 9 * 9 = 81
- 获取用户输入的任意数,判断是否是质数 ?
- 质数:又称素数,一个大于1 的自然数,除了1和它自身外,不能被其他自然数整数的数叫质数。
num = int(input("请输入一个数字:"))
if 1 < num <= 2:
print(num,'是质数')
elif num > 2:
i = 2 # 定义因子
while i < num:
if num % i == 0:
print(num,"不是质数")
break
i += 1
else:
print(num, '是质数')
else:
print(num,"不是质数")
---------输出--------
请输入一个数字:7
7 是质数
请输入一个数字:1
1 不是质数
请输入一个数字:2
2 是质数
请输入一个数字:4
4 不是质数
- 猜拳游戏:
- 出拳 玩家: 手动输入 电脑:随机输入
- 判断输赢:玩家获胜 电脑胜 平局
- 分析: 石头=0 剪刀=1 布=2
- 电脑随机出数,从【0,1,2】中出一个随机数。
print("==========出拳游戏============")
import random
while True:
p = input("请输入石头,剪刀,布:")
if p != "石头" and p != "剪刀" and p != "布":
print("输入无效,请重新输入!")
else:
s = random.randint(0,2)
if s == 0:
print("玩家出拳:",p,"电脑出拳:%s" % '石头')
elif s == 1:
print("玩家出拳:",p,"电脑出拳:%s" % '剪刀')
else:
print('玩家出拳:',p,"电脑出拳:%s" % '布')
剪刀 = 1
布 = 2
if (p =="石头" and s== 1) or (p == "剪刀" and s == 2) or (p == "布" and s == 0):
print("%s获胜" % "玩家")
elif (p == "石头" and s == 2) or (p == "剪刀" and s == 0) or (p == "布" and s == 1):
print('%s获胜'% "电脑")
else:
print('平局')