第6关知识导图
两个基础循环
布尔值
如何跳出whileTrue死循环的方法: 1,鼠标点一下终端区,按ctrl+c(windows) command+c(mac)(记得多按几次) (1) 遇到无法修改代码的情况: (2)可以修改代码的情况: - 将代码while True改成while False.
n+=的意思是n=n+1,!=的意思是不等于 囚徒困境 题目:假设有两名囚徒A和B因为合伙犯罪被抓捕,因没有确凿可以指认罪行的证据,审判者准备单独审判两位囚徒。 若两人都认罪,则两人各判10年;若一个认罪一个抵赖,则认罪的人判1年,抵赖的人判20年;若两人都抵赖,则各判3年。 解释:囚徒困境(prisoner's dilemma)是指两个被捕的囚徒之间的一种特殊博弈,反映个人最佳选择并非团体最佳选择。 思路:1个循环、2个input、4个判断、1个break 参考代码: 自动检测while True: a = input('A,你认罪吗?请回答认罪或者不认') b = input('B,你认罪吗?请回答认罪或者不认') if a == '认罪' and b == '认罪': print('两人都得判10年,唉') elif a == '不认' and b == '认罪': print('A判20年,B判1年,唉') elif a == '认罪' and b == '不认': print('A判1年,B判20年') else: print('都判3年,太棒了') break # 当满足开头提到的条件时,跳出循环。 题目:两人都认罪,则各判10年;一个认罪一个抵赖,则前者判1年,后者判20年;两人都抵赖,各判3年。只有两人都不认罪,程序才会停止。 现在有一个社会学家,在不同的人群中做这个实验,一旦遇到都不认罪的情况,就停止该人群中的实验。同时,他希望程序能记录每一对实验者的选择,以及记录第几对实验者都选择不认罪。 参考代码: 自动检测n = 0 list_answer = [] while True: n += 1 a = input('A,你认罪吗?请回答认罪或者不认:') b = input('B,你认罪吗?请回答认罪或者不认:') list_answer.append([a,b]) # 用列表嵌套的方式来存放实验者的选择,也可用元组或字典。这里是将a、b的回答以一个列表的形式增加到list_answer这个列表里,作为列表list_answer的元素 if a == '认罪' and b == '认罪': print('两人都得判10年,唉') elif a == '不认' and b == '认罪': print('A判20年,B判1年,唉') elif a == '认罪' and b == '不认': print('A判1年,B判20年') else: print('都判3年,太棒了') break print('第' + str(n) + '对实验者选了最优解。') #n的时候结束的循环,因为此时得到了最优解 for i in range(n): # 注意数据类型的转换,以及计数起点的不同(0和1) print('第' + str(i+1) + '对实验者的选择是:' + str(list_answer[i])) #因为i的范围是<n,并且i是从0开始,所以是第i+1对,并且通过列表偏移量提取列表元素,偏移量是从0开始的,所以用list_answer[i] 演员的问题 自动检测movies = { '妖猫传': ['黄轩', '染谷将太'], '无问西东': ['章子怡', '王力宏', '祖峰'], '超时空同居': ['雷佳音', '佟丽娅'], } #定义一个movies的字典,字典里面的键名是电影名,值是一个列表包含有对应键名电影的演员
actor = input('你想查询哪个演员?')#通过输入演员名给actor变量赋值
for movie in movies: # 用 for 遍历字典,这里遍历出来的是字典的键,也就是说是电影名 actors = movies[movie] # movies[movie]字典根据键取值,并且将取出的值赋值给了新的actors变量, # 这里actors是字典的值,是一个列表 if actor in actors: #判断一开始通过手动输入赋值的actor变量是不是在上一步取出的actors列表里面 print(actor+'出演了电影' + movie) #如果actor在根据电影取出的对应演员列表里就打印演员名出演了当前电影
|