day4 - 学习总结与作业
流程控制
1) 顺序结构:代码从上往下依次执行,每条语句只执行依次(默认)
2) 分支结构:根据条件选择执行或者不执行部分代码(使用if)
3) 循环结构:让代码重复执行(for、while)
分支结构
age = 10
if age >= 18:
print('成年')
else:
print('未成年')
if 分支结构
if单分支结构
语法:
if 条件语句:
代码段
说明:
if - 关键字;固定写法
条件语句 - 可以使任何有结果的表达式,包括:具体的数据、运算表达式(赋值运算例外)、已经付治国的变量、函数调用表达式等
: - 固定写法
代码段 - 从结构上就是和if保持一个缩进的一条或多条语句(至少一条);逻辑上:代码就是条件成立的时候才会执行的代码
if (): # 空=None=0=False
print('a')
如果是闰年打印闰年
a = float(input('请输入年份'))
if a % 4 == 0 and a % 100 != 0 or a % 400 == 0:
print('闰年')
else:
print('漏闰')
如果变量保存整数打印’整型’
num = 34
if type(num) == int:
print('整型')
if双分支结构
语法:
if 条件语句:
代码段1(满足条件执行的代码)
else:
代码段2(不满足条件执行的代码)
代码段3(不管满不满足条件都执行的代码)
判断一个数的奇偶性
a = float(input('请输入数字'))
if a % 2 == 0: #if a % 2 :
print('偶数')
else:
print('奇数')
if多分支结构
语法:
if 条件1:
代码段1
elif 条件2:
代码段2
elif 条件3:
代码段3
…
else:
代码段N
注意:elif可以使任意多个;else可以有也可以没有
a = float(input('请输入数字'))
if a > 90:
print('2000')
elif 85 < a <= 90 : #可以不写<= 90,因为在上一步已经排除了a>90的情况,所以已经是在
print('1000')
elif 75 < a <= 85 :
print('500')
elif 60 <= a <= 75:
print('小红花')
else:
print('不及格你要什么奖励?')
for循环
for循环
语法:
for 变量 in 序列:
循环体(需要重复执行的代码)
说明:
for - 关键字;固定写法
变量 - 有效变量名(可以使已经定义的,也可以是没有定义过的)
in - 关键字;固定写法
序列 - 容器型数据类型的数据,容器型数据类型包括:字符串、列表、字典、集合、元组、迭代器、生成器、range等
: - 固定写法
循环体 - 和for保持一个缩进的一条或多条语句;循环体就是需要重复执行的代码
执行过程
让变量去序列中取值,一个一个的取,取完为止;取一个值就执行一次循环体。
for循环的循环次数和序列中元素的个数有关
for x in 'abc':
print('qwer')
执行过程:
第一次: x = ‘a’ -> print(‘qwer’)
第二次: x = ‘b’ -> print(‘qwer’)
第三次: x = ‘c’ -> print(‘qwer’)
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(10,21) -> 10,11,12,13,14,15,16,17,18,19,20
range(M,N,STEP) - 产生[M,N)的等差数列,差是step
range(1,10,2) -> 1,3,5,7,9
range(20,2,-3) -> 20,17,14,11,8,5
打印1000以内的所有偶数
for x in range(0,1001,2):
print(x)
for循环的两个基本应用场景
累计求和
练习1. 写代码求 1+2+3+4…+100的和
# 第一步:定义变量保存结果,变量的初始值一般是0(求和)或者1(求积)
a = 0
# 第二步:用循环一个一个的获取累计数据
for b in range(1,101):
# 第三步:再循环体将取到的每一个数据合并到结果对应的变量中
a += b
print(a)
练习2. 求10的阶乘:123…*10
c = 1
for d in range(1,11):
c *= d
print(c)
练习3. 求100到200中所有能被3整除的偶数的和
e = 0
for f in range(102,201,6):
e += f
print(e)
统计个数
练习1:统计1000以内奇数的个数
第一步:定义变量保存最后的个数,变量默认值是0
count = 0
# 第二步:使用循环获取统计对象
for x in range(1000):
# 第三步:遇到一个满足统计条件的数据个数就加一
if x % 2 == 0:
count += 1
print(count)
或者直接
for x in range(1,1000,2):
count += 1
print(count)
练习2:统计1000以内能3整除但是不能被7整除的数的个数
s = 0
for i in range(1000):
if i % 3 == 0 and i % 7 != 0:
s += 1
print(s)
课后作业
基础题
-
根据输入的成绩的范围打印
及格
或者不及格
。a = float(input('请输入')) if a >= 60: print('及格') else: print('不及格')
-
根据输入的年纪范围打印
成年
或者未成年
,如果年龄不在正常范围内(0~150)打印这不是人!
。a = float(input('请输入')) if 150 > a >= 18: print('成年') elif a < 18 : print('未成年') else: print('这不是人')
-
输入两个整数a和b,若a-b的结果为奇数,则输出该结果,否则输出提示信息
a-b的结果不是奇数
a = float(input('请输入a')) b = float(input('请输入b')) c = a - b if c % 2 != 0: print(c) else: print('a-b的结果不是奇数')
-
使用for循环输出 0~100内所有3的倍数。
for x in range(0,101,3): print(x)
-
使用for循环输出100~200内个位数或者十位数能被3整除的数。
for x in range(100,201): if (x % 10) % 3 == 0: print(x) elif ((x % 100)// 10) % 3 == 0: print(x)
-
使用for循环统计100~200中十位数是5的数的个数
a = 0 for x in range(100,201): if ((x % 100) // 10) / 5 == 1: a += 1 print(x) print(a)
-
使用for循环打印50~150中所有能被3整除但是不能被5整除的数
for x in range(50,151): if x % 3 == 0 and x % 5 != 0: print(x)
-
使用for循环计算50~150中所有能被3整除但是不能被5整除的数的和
a = 0 for x in range(50,151): if x % 3 == 0 and x % 5 != 0: a += x print(a)
-
统计100以内个位数是2并且能够被3整除的数的个数。
a = 0 for x in range(2,100,10): if x % 3 == 0: a += 1 print(a)
进阶题
-
输入任意一个正整数,求他是几位数?
注意: 这儿不能使用字符串,只能用循环
b = 1 a = int(input('请输入a')) while a // 10 > 0: a //= 10 b += 1 print(b) 或者 a = int(input('请输入a')); b = 0 for x in range(a): a //= 10 b += 1 if a == 0: print(b) break
-
打印出所有的水仙花数,所谓水仙花数是指一个三位数,其各位数字⽴方和等于该数本身。例如:153是
⼀个⽔仙花数,因为
1³ + 5³ + 3³
等于 153。for x in range(100,1000): if (x // 100) ** 3 + ((x % 100) // 10) ** 3 + (x % 10) ** 3 == x: print(x)
-
判断指定的数是否是素数(素数就是质数,即除了1和它本身以外不能被其他的数整除的数)
a = int(input('请输入a')) for x in range(2,a): if a % x == 0: print('不是质数') break else: print('是质数') break
-
输出9*9口诀。 程序分析:分行与列考虑,共9行9列,i控制行,j控制列。
# i = 0 ; j = 0 for i in range(9): print() # i += 1 for j in range(9): # j += 1 s = i * j if j <= i: print(i, '*', j, '=', s,end = ' ') 简化之后 for i in range(1,10): print() for j in range(1,i+1): s = i * j print(j, '*', i, '=', s,end = ' ')
-
这是经典的"百马百担"问题,有一百匹马,驮一百担货,大马驮3担,中马驮2担,两只小马驮1担,问有大,中,小马各几匹?(可以直接使用穷举法)
# a = 0 ; b = 0 ; c = 0 for a in range(34): # a += 1 for b in range(50): # b += 1 for c in range(200): # c += 2 if a * 3 + b * 2 + c * 0.5 == 100 and a + b + c == 100: print(a,b,c)