第7节课程大纲
一、用数据做判断:布尔值
1.1 两个数值做比较
1.2 直接用数值做比较
1.3 布尔值之间的运算
二、四种新的语句
2.1 break语句
2.2 continue语句
2.3 pass语句
2.4 else语句
2.5 循环小练习
一、用数据做判断:布尔值
计算机的逻辑判断,只有两种结果,就是True和False,没有灰色地带。这个计算真假的过程,叫做【布尔运算】。而True和False,也就叫做【布尔值】。
while False:
print('while False')
#执行后无任何结果,这是因为while循环执行,必须要while后的条件为“真”,而【布尔值】False本身就是“假”,所以这个循环一次都没运行就结束了。
1.1 两个数值做比较
用两个数值做比较的【布尔运算】,主要包含以下情况:
1.2 直接用数值做比较
if 1:
print('熊猫')
#运行结果:熊猫
#整数1在这里就是作为一个条件,被判断为真(True)。这就是数值本身作为一个条件,被判断真假的情况。在Python中已经设定好什么数据为真,什么为假。假的是有限的,那么除了假的,就都是真的。
bool()函数可查看一个数据会被判断为真还是假
print('以下数据判断结果都是【假】:')
print(bool(False))
print(bool(0))
print(bool(''))
print(bool(None))
print('以下数据判断结果都是【真】:')
print(bool(True))
print(bool(1))
print(bool('abc'))
1.3 布尔值之间的运算
布尔值之间的五种运算:and、or、not、in、not in
list = [1,2,3,4,5]
a = 1
# 做一次布尔运算,判断“a是否在列表list之中”
print(bool(a in list))
#返回结果:True
print(bool(a not in list))
#返回结果:false
#如果涉及到的数据集合是字典的话,【in】和【not in】就可以用来判断字典中是否存在某个键
二、四种新的语句
这4种新语句配合for循环和while循环,可以让循环发挥更多的功能。
2.1 break语句
if...break的意思是如果满足了某一个条件,就提前结束循环。记住,这个只能在循环内部使用。
# break语句搭配for循环
for...in...:
...
if ...:
break
# break语句搭配while循环
while...(条件):
...
if ...:
break
#if...break的意思是如果满足了某一个条件,就提前结束循环。记住,这个只能在循环内部使用。
i = 0
while i<5:
print('明日复明日')
i = i+1
if i==3: # 当i等于3的时候触发
break # 结束循环
情景:孙悟空来了,就停止献祭童男童女
while True:
print('上供一对童男童女')
t = input('孙悟空来了吗')
if t == '来了':
break
print('孙悟空制服了鲤鱼精,陈家庄再也不用上供童男童女了')
#while True 无限循环常和break搭配
情景:密码是‘小龙女’,输入正确停止循环
while True: #注意True的大小写
key=input('请输入密码:')
if key=='小龙女':
break
print('密码正确')
2.2 continue语句
continue语句也是在循环内部使用的。当某个条件被满足的时候,触发continue语句,将跳过之后的代码,直接回到循环的开始。
# continue语句搭配for循环
for...in...:
...
if ...:
continue
...
# continue语句搭配while循环
while...(条件):
...
if ...:
continue
...
# continue语句搭配for循环
for i in range(5):
print('明日复明日')
if i==3: # 当i等于3的时候触发
continue # 回到循环开头
print('这句话在i等于3的时候打印不出来')
# continue语句搭配while循环
i = 0
while i<5:
print('明日复明日')
i = i+1
if i==3: # 当i等于3的时候触发
continue # 回到循环开头
print('这句话在i等于3的时候打印不出来')
情景:西夏公主挑驸马的方式是,需要青年回答对3个问题。
while True:
q1 = input('第一问:你一生之中,在什么地方最是快乐逍遥?')
if q1 != '黑暗的冰窖':
continue
print('答对了,下面是第二问:')
q2 = input('你生平最爱之人,叫什么名字?')
if q2 != '梦姑':
continue
print('答对了,下面是第三问:')
q3 = input('你最爱的这个人相貌如何?')
if q3 == '不知道':
break
print('都答对了,你是虚竹。')
2.3 pass语句
#当a>=100的时候,跳过,什么都不做。其他情况,也就是a<100的时候,执行一个print语句。
a = int(input('请输入一个整数:'))
if a >= 100:
pass
else:
print('你输入了一个小于100的数字')
#如果没有 pass将会报错
2.4 else语句
# else语句与for循环
for i in range(5):
a = int(input('请输入0结束循环,你有5次机会:'))
if a == 0:
print('你触发了break语句,导致else语句不会生效。')
break
else:
print('5次循环你都错过了,else语句生效了。')
# else语句与while循环
i=0
while i<5:
a = int(input('请输入0结束循环,你有5次机会:'))
i=i+1
if a == 0:
print('你触发了break语句,导致else语句不会生效。')
break
else:
print('5次循环你都错过了,else语句生效了。')
总结
2.5 循环小练习
情景:一个人在心里想好一个数,比如24,然后让另一个人猜。如果他猜的数比24小,告诉他“太小了”,如果他猜的数比24大,告诉他“太大了”。
#代码一:
num1=24
while True:
num2=int(input('请输入你猜的数:'))
if num1
print('你猜大了')
continue
elif num1>num2:
print('你猜小了')
else:
break
print('你猜对了!')
#代码二:
secret = 24 #设定秘密数字
while True:
guess = input('你来猜猜我的秘密数字是多少:') #输入猜测数字
if int(guess)==secret: #数字对比
print('正确!你很棒哦。')
break
elif int(guess)>secret:
print('你猜的太大了,请重新猜猜~')
else:
print('你猜的太小了,请重新猜猜~')
情景:猜数游戏只有三次机会
secret = 24
for i in range(3):
guess = input('guess which number is my secret:')
if int(guess) ==secret:
print('正确!你很棒哦。') #输出结果
break
elif int(guess)>secret:
print('你猜的太大了,请重新猜猜~')
else:
print('你猜的太小了,请重新猜猜~')
else:
print('给你3次机会都猜不到,你失败了。')
三、练习题
3.1 囚徒困境
题目:假设有两名囚徒A和B因为合伙犯罪被抓捕,因没有确凿可以指认罪行的证据,审判者准备单独审判两位囚徒。若两人都认罪,则两人各判10年;若一个认罪一个抵赖,则认罪的人判1年,抵赖的人判20年;若两人都抵赖,则各判3年。
现在,请写个代码:当两人都抵赖时,打印判决,代码结束;若为其他结果,则在打印判决后继续循环。
while True:
a=input('A囚犯是否认罪,请输入“认罪”或“不认罪”')
b=input('B囚犯是否认罪,请输入“认罪”或“不认罪”')
if a=='不认罪' and b=='不认罪':
print('两人都抵赖,各判3年')
break
elif a=='认罪' and b=='认罪':
print('两人已认罪,各判10年')
continue
elif a=='认罪' and b=='不认罪':
print('A认罪,B抵赖,A判1年,B判20年')
continue
elif a=='不认罪' and b=='认罪':
print('A抵赖,B认罪,A判20年,B判1年')
continue
else:
print('别捣乱,只能回答“认罪”或“不认罪”')
3.2 记录困境中的选择
题目:现在有一个社会学家,在不同的人群中做3.1中的囚徒困境实验,一旦遇到都不认罪的情况,就停止该人群中的实验。
同时,他希望程序能记录每一对实验者的选择,以及记录第几对实验者都选择不认罪。请你帮帮他吧。
list=[]
i=0
while True:
a=input('A囚犯是否认罪,请输入“认罪”或“不认罪”:')
b=input('B囚犯是否认罪,请输入“认罪”或“不认罪”:')
i=i+1
list.append([a,b])
if a=='不认罪' and b=='不认罪':
print('两人都抵赖,各判3年')
break
elif a=='认罪' and b=='认罪':
print('两人已认罪,各判10年')
continue
elif a=='认罪' and b=='不认罪':
print('A认罪,B抵赖,A判1年,B判20年')
continue
elif a=='不认罪' and b=='认罪':
print('A抵赖,B认罪,A判20年,B判1年')
continue
else:
print('别捣乱,只能回答“认罪”或“不认罪”,请重新输入')
list.pop()
i=i-1
print('第'+str(i)+'对实验者选择最优方案')
print(list) #实验结果记录
3.3 演员的作品
题目:我很喜欢看电影,我回忆了一下,这两年我觉得还不错的国产电影。下面,会将电影的影片名和主演放在字典里,如movie = {'妖猫传':['黄轩','染谷将太']}。需要你补充一些代码,让其他人只要输入演员名,就打印出:××出演了电影××。
movies = {
'妖猫传':['黄轩','染谷将太'],
'无问西东':['章子怡','王力宏','祖峰'],
'超时空同居':['雷佳音','佟丽娅'],
}
actor = input('你想查询哪个演员?')
for movie in movies: # 用 for 遍历字典
actors = movies[movie] # 读取各个字典的主演表
if actor in actors:
print(actor + '出演了电影' + movie)
#for i in 字典,遍历字典,得到字典的键;也就是电影名称
学习时间:2020年3月13日