day4 分支和循环
if多分支结构
- if-elif-else - 不同条件之间存在:其中一个条件成立的时候,别的条件一定不会成立
执行特点:如果前面的条件成立,那么后面的条件不会再判断(后面的条件的判断是在前面的条件不成立的情况下进行的)
# 根据分数打印:优秀(>=90)、良好([75, 90))、中等([60, 75))、不及格(<60)
score = 99
if score >= 90:
print('优秀')
elif score >= 75:
print('良好')
elif score >= 60:
print('中等')
else:
print('不及格')
-
单独使用多个if - 条件之间存在:其中一个条件成立,其他的条件也可能成立
if score >= 90: print('优秀') if 75 <= score < 90: print('良好') if 60 <= score < 75: print('中等') if score < 60: print('不及格')
三目运算符
Python中的三目运算符
值1 if 表达式1 else 值2 - 先判断表达式1的结果是否为True,如果是,整个运算表达式的结果是值1,否则是值2
a = 100
x = 10 if a > 100 else 20
print(x)
for循环
语法:
for 变量 in 序列:
循环体
说明:
for、in - 关键字;固定写法
变量 - 变量名(可以是已经定义的变量的变量名,也可以是没有定义过的变量的变量名)
序列 - 容器型数据类型的数据就是序列,例如:字符串、列表、字典、元组、集合、迭代器、生成器、range等
: - 固定写法
循环体 - 结构上是和for保持一个缩进的一条或者多条语句(至少1条);逻辑上就是需要重复执行的代码。
for x in 'abc':
print(x, '++++')
print('hello!')
range函数:产生一个等差数列的数字序列的函数
range(N) - 产生[0, N)步长为1的数字序列
range(3) -> 0, 1, 2
range(5) -> 0, 1, 2, 3, 4
range(M, N) - 产生[M, N)步长为1的数字序列
range(1, 5)-> 1, 2, 3, 4
range(10, 21) -> 10, 11, 12,…, 20
range(M, N, step) - 产生[M, N)步长为step指定值的数字序列,
range(1, 5, 2) -> 1, 3
range(10, 20, 3) -> 10, 13, 16, 19
range(20, 14, -1) -> 20, 19, 18, 17, 16, 15
# 练习1:利用循环计算1+2+3+...+100的和 - 求和套路
sum1 = 0 # 保存最后的和
for x in range(1, 101):
sum1 += x # sum1 = sum1 + x
print(sum1)
# 练习2:统计1000以内能被3整除但是不能被7整除的数的个数
count = 0
for x in range(3, 1000, 3):
if x % 7 != 0:
count += 1
print(count)
while 循环
语法:
while 条件语句:
循环体
说明:
while - 关键字,固定写法
条件语句 - 任何有结果的表达式(不能是赋值语法)
: - 固定写法
循环体 - 结构上和while保持一个缩进的一条或者多条语句;逻辑上就是需要重复执行的代码
# 练习:打印10次 'hello!'
x = 0
while x < 10:
print('hello!')
x += 1
# 练习(循环次数不确定):提示用户输入密码,直到密码输入正确为止
pw = '123456' # 原密码
get_pw = None # 保存输入得到的密码
# 当输入的密码和原密码不相等的时候就提示输入
while get_pw != pw:
get_pw = input('请输入密码:')
continue和break
continue和break只能在循环体中使用
- continue - 结束一次循环,当执行循环体的时候遇到了continue,那么这一次循环结束,直接进入下一次循环。
for x in range(10):
if x % 2:
continue
print(x)
- break - 结束整个循环,执行循环体的时候如果遇到了break,那么整个循环直接结束。
for x in range(1, 10):
if x % 3 == 0:
break
print(x)
while循环和break的配合
初学者的while循环
while True:
需要重复执行的代码
if 循环结束的条件:
break
pw = '123456'
while True:
get_pw = input('请输入密码:')
if get_pw == pw:
break
1. 基础题
-
输入年份,如果输入的年是闰年打印
'闰年'
否则打印'平年'
year = int (input('请输入年份:')) if (year % 4 == 0 and year % 100 != 0) or (year % 400 == 0) : print('闰年') else: print('平年')
-
使用for和while循环输出 0~100内所有3的倍数。
for x in range (0,101): if x % 3 == 0: print(x)
a = 0 while a <= 100: if a % 3 == 0: print(a) a += 3
-
使用for和while循环输出100~200内个位数或者十位数能被3整除的数
for y in range(100,201): if (y // 10 % 10 ) % 3== 0 or y % 10 % 3 == 0: print(y)
y = 100 while y <= 200: if (y // 10 % 10) % 3 == 0 or y % 10 % 3 == 0: print(y) y += 1
-
使用for和while循环统计100~200中十位数是5的数的个数
num1 = 0 for o in range (100,201): if o // 10 % 10 == 5 : num1 += 1 print(num1)
num1 = 0 o = 100 while o <= 200 : if o // 10 % 10 == 5: num1 += 1 o += 1 print(num1)
-
使用for和while循环打印50~150中所有能被3整除但是不能被5整除的数
for p in range(50,151): if p % 3 == 0 and p % 5 != 0: print(p)
p = 50 while p <= 151: if p % 3 == 0 and p % 5 != 0: print(p) p += 1
-
使用for和while循环计算50~150中所有能被3整除但是不能被5整除的数的和
sum1 = 0
for f in range(50,151):
if f % 3 == 0 and f % 5 != 0:
sum1 += f
print(sum1)
sum1 = 0
f = 50
while f < 151:
if f % 3 == 0 and f % 5 != 0:
sum1 += f
f += 1
print(sum1)
2. 进阶题
- 使用循环计算
1*2*3*4*...*10
的结果。
u = 1
m = 1
while m <= 10 :
m += 1
u *= m
print(u)
-
统计100以内个位数是2并且能够被3整除的数的个数。
count = 0 for m in range(0,101): if m % 10 == 2 and m % 3 == 0: count += 1 print(count)
-
输入任意一个正整数,求他是几位数?
注意: 这儿不能使用字符串,只能用循环
- 打印出所有的水仙花数,所谓水仙花数是指一个三位数,其各位数字⽴方和等于该数本身。例如:153是
⼀个⽔仙花数,因为 1³ + 5³ + 3³
等于 153。
n = 100
while n < 1000:
sum1 = (n % 10) ** 3 + (n % 100 // 10) ** 3 + (n // 100) ** 3
if sum1 == n:
print(n)
n += 1
3. 挑战题
- 判断指定的数是否是素数(素数就是质数,即除了1和它本身以外不能被其他的数整除的数)
num = 8
for x in range(2, int(num**0.5) + 1):
if num % x == 0:
print(num, '不是素数!')
break
else:
print(num, '是素数!')
-
求斐波那契数列列中第n个数的值:1,1,2,3,5,8,13,21,34… (这儿的n可以是任意正整数,可以通过输入来确定)
-
输出9*9口诀。 程序分析:分行与列考虑,共9行9列,i控制行,j控制列。
for i in range (1,10): for j in range (1,10): print(i , '*' , j ,'=', i * j)
-
这是经典的"百马百担"问题,有一百匹马,驮一百担货,大马驮3担,中马驮2担,两只小马驮1担,问有大,中,小马各几匹?(可以直接使用穷举法)
for x in range(101):
for y in range (101):
z = 100 - 3*x + 2*y
if x + y + z == 100 and x >= 0 and y >= 0 and z >=0:
print ('大马:',x ,'中马:',y , '小马:',z )