if
语句基本语法if 要判断的条件: 条件成立时,要做的事情 …… else: 条件不成立时,要做的事情 ……
案例演示
# 1. 输入用户年龄 age = int(input("今年多大了?")) # 2. 判断是否满 18 岁 # if 语句以及缩进部分的代码是一个完整的语法块 if age >= 18: print("可以进网吧上网……") else: print("你的年龄尚未满足,应该回家写作业!") # 3. 无论条件是否满足都会执行 print("Ok")
注意:
if
和else
语句以及各自的缩进部分共同是一个 完整的代码块。并且条件判断中表达式可以与and
,or
,not
结合实现多重判断
if
进阶if-elif-else
基本语法
if 条件1: 条件1满足执行的代码 …… elif 条件2: 条件2满足时,执行的代码 …… elif 条件3: 条件3满足时,执行的代码 …… else: 以上条件都不满足时,执行的代码 ……
注意:
elif
和else
都必须和if
联合使用,而不能单独使用。可以将if
、elif
和else
以及各自缩进的代码,看成一个 完整的代码块
案例演示
holiday_name = "平安夜" if holiday_name == "情人节": print("买玫瑰") print("看电影") elif holiday_name == "平安夜": print("买苹果") print("吃大餐") elif holiday_name == "生日": print("买蛋糕") else: print("每天都是节日啊……")
if
嵌套if 的嵌套 的应用场景就是:在之前条件满足的前提下,再增加额外的判断
基本语法
if 条件 1: 条件 1 满足执行的代码 …… if 条件 1 基础上的条件 2: 条件 2 满足时,执行的代码 …… else: 条件 2 不满足时,执行的代码 else: 条件1 不满足时,执行的代码 ……
案例演示
# 定义布尔型变量 has_ticket 表示是否有车票 has_ticket = True # 定义整数型变量 knife_length 表示刀的长度,单位:厘米 knife_length = 20 # 首先检查是否有车票,如果有,才允许进行 安检 if has_ticket: print("有车票,可以开始安检...") # 安检时,需要检查刀的长度,判断是否超过 20 厘米 # 如果超过 20 厘米,提示刀的长度,不允许上车 if knife_length >= 20: print("不允许携带 %d 厘米长的刀上车" % knife_length) # 如果不超过 20 厘米,安检通过 else: print("安检通过,祝您旅途愉快……") # 如果没有车票,不允许进门 else: print("大哥,您要先买票啊")
assert
关键字assert
这个关键词我们称之为“断言”,当这个关键词后边的条件为 False 时,程序自动崩溃并抛出AssertionError
的异常。
assert (3 > 5) print("hello")
注意:在进行单元测试时,可以用来在程序中置入检查点,只有条件为 True 才能让程序正常工作。
while
循环基本语法
while 布尔表达式: 代码块
注意:while代码块会一直执行下去,直到布尔表达式为False。且布尔表达式为非0数值时,则视为True,为0时,视为False。
案例演示
result = 0 i = 0 while i <= 100: if i % 2 == 0: result += i i += 1 print("0~100之间偶数求和结果 = %d" % result)
while-else
循环基本语法
while 条件: 条件成立重复执行的代码 else: 循环正常结束之后要执行的代码
案例演示
# 循环正常结束,else后执行 i = 1 while i <= 5: print("hello world") i += 1 else: print("你好 世界") """ 输出结果: hello world hello world hello world hello world hello world 你好 世界 """
# 循环非正常结束,else后不执行,continue视为正常结束 i = 1 while i <= 5: if i == 3: break # 跳出while循环 print("hello world") i += 1 else: print("你好 世界") """ 输出结果: hello world hello world """
for
循环for循环是迭代循环,在Python中相当于一个通用的序列迭代器,可以遍历任何有序序列,如str
、list
、tuple
等,也可以遍历任何可迭代对象,如dict
。
基本语法
for 迭代变量 in 可迭代对象: 代码块
每次循环,迭代变量被设置为可迭代对象的当前元素,提供给代码块使用。
案例演示
遍历字符串
str1 = "hellokitty" for item in str1: print(item, end='\t')
遍历列表
name_list = ['Tom', 'Alice', 'Tony', 'Smith'] # 1.直接遍历 for name in name_list: print(name, end=' ') # 2.下标遍历 for i in range(len(name_list)): print(name_list[i], end=' ')
遍历字典
alien_0 = {'color': 'green', 'points': 5} # 遍历字典的key for key in alien_0.keys(): print(key) # 遍历字典的value for value in alien_0.values(): print(value) # 遍历字典键值对 for item in alien_0.items(): print(item) # 使用for循环搭配items方法分开遍历键值对 for key, value in alien_0.items(): print("Key: " + key) print("Value: " + str(value))
for-else
循环基本语法
for 迭代变量 in 可迭代对象: 代码块 else: 代码块
注意:
for
循环正常执行完的情况下,执行else
输出,如果for
循环中执行了跳出循环的语句,比如break
,将不执行else
代码块的内容,与while - else
语句一样。
案例演示
for num in range(10, 20): # 迭代 10 到 20 之间的数字 for i in range(2, num): # 根据因子迭代 if num % i == 0: # 确定第一个因子 j = num / i # 计算第二个因子 print('%d 等于 %d * %d' % (num, i, j)) break # 跳出当前循环 else: # 循环的 else 部分 print(num, '是一个质数')
Python
内置函数range
函数基本语法
range(start,end,step) # 生成从start到end的数字,步长为step,供for循环使用,前闭后开
案例演示
for i in range(1, 10, 3): print(i)
enumerate
函数用于将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列,同时列出数据和数据下标。
基本语法
enumerate(sequence, [start=0]) """ sequence -- 一个序列、迭代器或其他支持迭代对象。 start -- 下标起始位置。 返回 enumerate(枚举) 对象 """
案例演示
name_list = ['Tom', 'Alice', 'Tony', 'Smith'] number_tuple = (1, 4, 5, 7, 8) # 默认下标起始位置为0 print(list(enumerate(name_list))) # [(0, 'Tom'), (1, 'Alice'), (2, 'Tony'), (3, 'Smith')] # 默认下标起始位置为2 print(tuple(enumerate(number_tuple, start=2))) # ((2, 1), (3, 4), (4, 5), (5, 7), (6, 8))
enumerate
函数和for
循环结合使用
基本语法
用 enumerate(A)
不仅返回了 A
中的元素,还顺便给该元素一个索引值 (默认从 0 开始)。此外,用 enumerate(A, j)
还可以确定索引起始值为 j
。
for i, a in enumerate(A) do something with a
案例演示
name_list = ['Tom', 'Alice', 'Tony', 'Smith'] for i, name in enumerate(name_list, 1): print('number=' + str(i) + ' name=' + name) """ 输出结果: number=1 name=Tom number=2 name=Alice number=3 name=Tony number=4 name=Smith """
break
语句在循环过程中,如果 某一个条件满足后,不 希望 循环继续执行,可以使用 break
退出循环
案例演示
i = 0 while i < 10: # break 某一条件满足时,退出循环,不再执行后续重复的代码 # i == 3 if i == 3: break print(i) i += 1 print("over") """ 输出结果: 0 1 2 over """
continue
语句在循环过程中,如果 某一个条件满足后,不 希望 执行循环代码,但是又不希望退出循环,可以使用 continue
案例演示
i = 0 while i < 10: # 当 i == 7 时,不希望执行需要重复执行的代码 if i == 7: # 在使用 continue 之前,同样应该修改计数器 # 否则会出现死循环 i += 1 continue # 重复执行的代码 print(i) i += 1 """ 输出结果: 0 1 2 3 4 5 6 8 9 """
基本语法
[ expr for value in collection [if condition] ]
案例演示
list1 = [i for i in range(10) if i % 2 == 0] print(list1) # [0, 2, 4, 6, 8] list2 = [(i, j) for i in range(1, 3) for j in range(3)] print(list2) # [(1, 0), (1, 1), (1, 2), (2, 0), (2, 1), (2, 2)] list3 = [[i, j] for i in range(0, 3) for j in range(0, 3)] print(list3) # [[0, 0], [0, 1], [0, 2], [1, 0], [1, 1], [1, 2], [2, 0], [2, 1], [2, 2]] list3[0][1] = 10 # 此处可看作是二维数组 print(list3) # [[10, 0], [0, 1], [0, 2], [1, 0], [1, 1], [1, 2], [2, 0], [2, 1], [2, 2]] a = [(i, j) for i in range(0, 3) if i < 1 for j in range(0, 3) if j > 1] print(a) # for i in range(0, 3): # if i < 1: # for j in range(0, 3): # if j > 1: # print(i, j) # [(0, 2)]
基本语法
( expr for value in collection [if condition] )
案例演示
a = (x for x in range(10)) print(a) # 返回一个generator对象at 0x000001B0EEFC8390> print(tuple(a)) # (0, 1, 2, 3, 4, 5, 6, 7, 8, 9) 每访问一个元素,generator对象中删除一个对象 print(list(a)) # []
基本语法
{ key_expr: value_expr for key, value in collection [if condition] }
案例演示
counts = {'BMP': 268, 'HP': 125, 'DELL': 201, 'Lenovo': 199, 'acer': 99} # 需求:提取上述电脑数量大于等于200的字数据 count1 = {key: value for key, value in counts.items() if value >= 200} print(count1)
基本语法
{ expr for value in collection [if condition] }
案例演示
list1 = [1, 1, 2] set1= {i ** 2 for i in list1} print(set1) #{1, 4},set不包含重复元素
passwdList = ['123', '345', '890'] # 密码列表 valid = False # 初始密码状态为False count = 3 # 输入密码次数 while count > 0: password = input('enter password:') for item in passwdList: # 用于遍历密码列表 # 如果输入的密码在密码列表中,则更新密码状态为True,并且跳出for循环,结束此次遍历密码列表 if password == item: valid = True break # 此处用于判断倘若输入的密码不在密码列表中,则密码状态无法更新,仍会为False,请给出友好提示,并进行密码次数-1,结束当前while循环,继续下一次while循环输入密码 ,如果三次机会使用完毕,输入密码不在密码列表中,则会因为count不满足大于0跳出while循环 if not valid: print('invalid input') count -= 1 continue # 当输入密码在密码列表中,密码状态更新为True,此时不应再继续执行while循环继续输入密码,使用break跳出while循环 else: break
编写一个Python程序来查找那些既可以被7整除又可以被5整除的数字,介于1500和2700之间。
for num in range(1500, 2701): if (num % 7 == 0) and (num % 5 == 0): print(num, end=' ')
龟兔赛跑题目描述:
话说这个世界上有各种各样的兔子和乌龟,但是研究发现,所有的兔子和乌龟都有一个共同的特点——喜欢赛跑。于是世界上各个角落都不断在发生着乌龟和兔子的比赛,小华对此很感兴趣,于是决定研究不同兔子和乌龟的赛跑。他发现,兔子虽然跑比乌龟快,但它们有众所周知的毛病——骄傲且懒惰,于是在与乌龟的比中,一旦任一秒结束后兔子发现自己领先t米或以 上,它们就会停下来休息s秒。对于不同的兔子,t
,s
的数值是不同的,但是所有的乌龟却是一致——它们不到终点决不停止。
然而有些比赛相当漫长,全程观看会耗费大量时间,而小华发现只要在每场比赛开始后记录下兔子和乌龟的数据——兔子的速度v1
(表示每秒兔子能跑v1
米),乌龟的速度v2
,以及兔子对应的t
,s
值,以及赛道的长度l——就能预测出比赛的结果。但是小华很懒,不想通过手工计算推测出比赛的结果,于是他找 到了你——清华大学计算机系的高才生——请求帮助,请你写一个程序,对于输入的一场比赛的数据v1
,v2
,t
,s
,l
,预测该场比赛的结果。
输入:
输入只有一行,包含用空格隔开的五个正整数v1
,v2
,t
,s
,l
,其中(v1
,v2
< =100;t
< =300;s
< =10;l
< =10000且为v1
,v2
的公倍数)
输出:
输出包含两行,第一行输出比赛结果——一个大写字母“T”或“R”或“D”,分别表示乌龟获胜,兔子获胜,或者两者同时到达终点。
第二行输出一个正整数,表示获胜者(或者双方同时)到达终点所耗费的时间(秒数)。
样例输入: 10 5 5 2 20 样例输出 D 4
""" v1 兔子速度 v2 乌龟速度 s1 兔子路程 s2 乌龟路程 i 获胜者时间秒数 """ v1, v2, t, s, l = map(int, input().split()) if v1 <= 100 and v2 <= 100 and t <= 300 and s <= 10 and l <= 10000 and l % v1 == 0 and l % v2 == 0: s1, s2, i = 0, 0, 0 while s1 < l and s2 < l: s1, s2, i = v1+s1, v2+s2, i+1 if s1 == l or s2 == l: break elif s1-s2 >= t: s2, i = s2 + v2 * s, i+s if s1 > s2: print('R') if s1 == s2: print('D') if s1 < s2: print('T') print(i)