成员运算
运算符in和not in 用于成员检测 如果x 是s 的成员则x ins 值为True,否则为False x not in s 返回x
ins 取反后的值 如果x 不是s 的成员则x not ins 值为True,否则为 False
运算符in和not in 用于成员检测 对于字符串和字节串类型来说 当且仅当x 是y 的子串时,x iny 为True
print('admin' in 'administrator') # True print('ada' in 'administrator') # False print('' in 'admin') # False,空格字符串
运算符in和not in 用于成员检测 空字符串总是被视为任何其他字符串的 子串,因此’’ in 'admin’将返回True
print('' in 'admin') # True,空字符串 print('' in 'admin') # False,空格字符串
运算符in和not in 用于成员检测 所有内置序列、集合类型、字典都支持成员运算 测试元素x 是否为对象s 的一个成员(元素)
print(10 in range(1, 20)) # True print('me' in {'you', 'me', 'he'}) # True print('she' in {'you', 'me', 'he'}) # False print(2 in [1, 2, 3, 4, 5]) # True print(6 in [1, 2, 3, 4, 5]) # False print([1, 2] in [[1, 1], [1, 2], [1, 3]]) # True
运算符in和not in 用于成员检测 所有内置序列、集合类型、字典都支持成员运算 测试元素x 是否为对象s 的一个成员(元素)
print([1, 2] in [1, 2, 3, 4, 5]) # False [1, 2] 1,2,3,4,5 print(range(5) in range(10)) # False range(5) 0,1,2,3,4,5,6,7,8,9
运算符in和not in 用于成员检测 对于字典来说成员运算检测对象是否在字典的键中存在
print('me' in {'you': 100, 'me': 1000, 'he': 50}) print(100 in {'you': 100, 'me': 1000, 'he': 50})
for循环
for 循环 遍历循环 依据可遍历对象中的子项,按顺序进行迭代 重复次数确定时使用
for 循环变量in 可遍历对象:
重复执行的语句块
[else]:
循环正常结束后需执行的语句
for i in range(n): Range 语句块 for c in string: 字符串 语句块 for item in list: 列表(元组、集合、字典) 语句块 for line in file: 文件对象 语句块
while循环
依据判断条件表达式的结果决定是否执行循环
重复次数不确定时使用
while判断条件:
重复执行的语句块 [else]:
循环正常结束后需执行的语句
continue break 应用于while或for循环语句中 置于条件判定语句块中 当满足某条件时触发该语句的执行 continue
应用于while或for循环语句中 跳过本次循环中剩余语句的执行 提前进入下一次循环
for i in range(40): if i % 3 == 0 or i % 10 == 3 or i // 10 == 3: continue # 跳过本次循环else语句 else: print(i, end=' ')
break
应用于while或for循环语句中
跳过当前循环中未执行的次数,提前结束当前层次循环
break应用:输出最大因子
num = int(input()) # 输入一个整数,例如:100 for i in range(num -1, 0, -1): # 遍历小于num且大于1的整数 if num % i == 0: # 若i为num的因数 print(i) # 输入100时,输出50 break # 中止循环
break只能提前结束当前循环
当循环层数多于一层时,可以用一个标记变量
根据标记变量的值决定是否继续退出外层循环
break应用:百钱百鸡
公鸡5元一只,母鸡3元一只,小鸡3只一元。
用户输入想买的鸡的数量和付出的钱数,
计算公鸡、母鸡和小鸡的数量。
如果有解,输出公鸡最少,小鸡最多的一组;
如果无解则输出“无解”
def hundred_chickens(num, money): for cock in range(1, num): # 从小到大遍历公鸡数量 for hen in range(1, num): # 从小到大遍历母鸡数量 chicken = num -cock -hen # 小鸡数量计算得到 if chicken % 3 == 0 and chicken > 0 and 5 * cock + 3 * hen + chicken // 3 == money: return cock,hen,chicken # 输出找到的第一组解 else: # 两层循环都正常结束时,表明未找到解 return '无解' if __name__ == "__main__": number,amount_of_money = map(int, (input().split())) # 切分空格分隔的输入转整型 print(*hundred_chickens(number, amount_of_money))
项目实训1
兔子繁殖问题
描述
古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,用户输入一个月份数,计算并在一行内输出该月的兔子总对数。
输入
一个不小于2的正整数
输出
输出该月的兔子的对数
运行代码:
n = int(input('请输入一个月份数:')) a, b = 1, 1 for i in range(n): print(a, end=' ') a, b = b, a+b
运行结果:
项目实训2
输出九九乘法表:
描述
输出乘法表,如下所示:
1*1= 1
21= 2 22= 4
31= 3 32= 6 3*3= 9
41= 4 42= 8 43=12 44=16
51= 5 52=10 53=15 54=20 5*5=25
61= 6 62=12 63=18 64=24 65=30 66=36
71= 7 72=14 73=21 74=28 75=35 76=42 7*7=49
81= 8 82=16 83=24 84=32 85=40 86=48 87=56 88=64
91= 9 92=18 93=27 94=36 95=45 96=54 97=63 98=72 9*9=81
运行代码:
for i in range(1, 10): for j in range(1, i + 1): # 每行输出10次 print('{}*{}={}'.format(i, j, i*j), end=' ') print() # 内层循环结束时换到下一行
运行结果:
项目实训3
百钱买百鸡
描述
我国古代数学家张丘建在《算经》一书中提出的数学问题:鸡翁一值钱五,鸡母一值钱三,鸡雏三值钱一。百钱买百鸡,如果要求鸡翁、鸡母、鸡雏都不为零,问鸡翁、鸡母、鸡雏各几何?
输入格式
该题目没有输入
输出格式
每行输出一组结果,按鸡翁数、鸡母数、鸡雏数的顺序输出,数字之间用空格分隔;
如果有多组解时,按鸡翁数量由少到多输出;
运行代码:
for cock in range(1,100): for hen in range(1,100): for chicken in range(3,100,3): if cock+hen+chicken==100 and 5*cock + 3*hen + chicken//3==100: print(cock,hen,chicken)
运行结果:
项目实训4:
计算圆周率——无穷级数法
描述
π是个超越数,圆周率的超越性否定了化圆为方这种尺规作图精确求解问题的可能性。有趣的是,π可以用无穷级数表示:
左边的展式是一个无穷级数,被称为莱布尼茨级数(Leibniz),这个级数收敛到π/4,它通常也被称为格雷戈里-莱布尼茨级数,用以纪念莱布尼茨同时代的天文学家兼数学家詹姆斯·格雷戈里。
编程用这个公式计算π值,输入一个小数作为阈值,当最后一项的绝对值小于给定阈值时停止计算并输出得到的π值。
输入格式:
一个正浮点数threshold,限定级数法求解pi值时,迭代累加只加绝对值大于threshold的项。
输出格式:
输出为一个浮点数,是程序使用级数法求解的pi值。
运行代码:
pi = 0 sign = 1 i=1 while 1/i>= 1e-7: pi=pi+sign*1/i i=i+2 sign=-sign print(pi*4)
运行结果:
项目实训5:
百分制成绩转换五分制F
描述
编写一个学生成绩转换程序,用户输入百分制的学生成绩,成绩大于等于 90 且小于等于 100 的输出为“A”,成绩大于或等于 80 且小于 90 的输出为“B”,成绩大于或等于 70 且小于 80 的输出为“C”,成绩大于或等于 60 且小于 70 的输出为“D”,成绩小于 60 且大于等于 0 的输出为“E”,如果输出的成绩大于 100 或小于 0 或输入中包含非数字字符,输出’data error!'。
输入格式
输入一个浮点数,代表百分制成绩。
输出格式
A、B、C、D、E中的一个字母,表示五分制的成绩等级;或输出’data error!’
运行代码:
gra = float(input('请输入成绩:')) if 90 <= gra <= 100: print('A') if 80 <= gra < 90: print('B') if 70 <= gra < 80: print('C') if 60 <= gra < 70: print('D') if 0 <= gra < 60: print('E') if gra > 100 or gra < 0: print('data error!')
运行结果:
项目实训6:
与3有关的数
描述
一个正整数,如果它能被3整除,或者它的十进制表示法中某一位的数字为3,则称其为与3相关的数,否则就是与3无关的数。
查找并输出40以内与3有关数。
输入格式
无
输出格式
所有与3有关的数
运行代码:
# 查找并输出40以内与3有关数。 for i in range(1, 40): if i % 3 == 0 or i % 10 == 3 or i // 10 == 3: print(i, end=" ")
# 输入一个数,输出不大于这个数所有与3有关的数 num = int(input('请输入一个整数:')) for i in range(num + 1): if i % 3 == 0 or i % 10 == 3 or i // 10 == 3: print(i, end=" ")
运行结果:
项目实训7:
最大因数
描述
输入一个大于1的整数,输出其自身以外的最大因数
输入格式
输入一个大于1的整数
输出格式
最大因数
运行代码:
num = int(input('请输入一个大于1的整数:')) ls = [] for i in range(1, num): if num % i == 0: ls.append(i) print(ls[-1])
运行结果: