分享

第6关:布尔值和四种语句

 Vivian_liang 2020-07-29

第6关知识导图

两个基础循环

布尔值

如何跳出whileTrue死循环的方法:

1,鼠标点一下终端区,按ctrl+c(windows) command+c(mac)(记得多按几次)

(1) 遇到无法修改代码的情况:

  • 刷新网页,然后修改代码
  • 关闭页面重新进入,再去改代码

(2)可以修改代码的情况:

  • 将代码while True改成while False.
  • 将代码whileTrue加#,注释掉然后跳过
  • 故意写错代码(删掉一个括号),点击跳过

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在根据电影取出的对应演员列表里就打印演员名出演了当前电影

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多