美文网首页博弈
Python笔记-囚徒困境及记录困境中的选择

Python笔记-囚徒困境及记录困境中的选择

作者: 我开心0536 | 来源:发表于2020-02-18 22:18 被阅读0次

【功能】
学习的代码:囚徒困境练习题( python 3.7版本下调试成功)

【问题一】
1.若两人都认罪,则两人各判10年;
2.若一个认罪一个抵赖,则认罪的人判1年,抵赖的人判20年;
3.若两人都抵赖,则各判3年。
现在,请写个代码:当两人都抵赖时,打印判决,代码结束;若为其他结果,则在打印判决后继续循环。

【以下为代码,右上角有复制按钮,可一键复制】

#解答方式一:
A='不认罪'
B='不认罪'

if (A=='认罪' and B=='认罪'):   #  ==表示等于  !=表示不等于 
    A=B='判决10年'
elif (A=='认罪' and B!='认罪'):
    A='认罪,判决1年'
    B='不认罪,判决20年'
elif (A!='认罪' and B=='认罪'):
    A='不认罪,判决20年'
    B='认罪,判决1年'
else:
    A=B='不认罪,判决3年'
print('A',A,'\nB',B)  # \n表示换行

【以下为代码,右上角有复制按钮,可一键复制】

# 解答方式二(标准答案):
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  # 当满足开头提到的条件时,跳出循环。

【问题二:】
学习的代码:记录困境中的选择练习题( python 3.7版本下调试成功)
上一个练习,我们将“囚徒困境”写成了代码,让程序收集两名囚犯的认罪情况,进而决定他们的判决:
两人都认罪,则各判10年;一个认罪一个抵赖,则前者判1年,后者判20年;两人都抵赖,各判3年。只有两人都不认罪,程序才会停止。
现在有一个社会学家,在不同的人群中做这个实验,一旦遇到都不认罪的情况,就停止该人群中的实验。
同时,他希望程序能记录每一对实验者的选择,以及记录第几对实验者都选择不认罪。请你帮帮他吧。

【以下为代码,右上角有复制按钮,可一键复制】

#上一个练习,我们将“囚徒困境”写成了代码,让程序收集两名囚犯的认罪情况,进而决定他们的判决:
#两人都认罪,则各判10年;一个认罪一个抵赖,则前者判1年,后者判20年;两人都抵赖,各判3年。只有两人都不认罪,程序才会停止。
#现在有一个社会学家,在不同的人群中做这个实验,一旦遇到都不认罪的情况,就停止该人群中的实验。
#同时,他希望程序能记录每一对实验者的选择,以及记录第几对实验者都选择不认罪。请你帮帮他吧。

#  =============================
# 记录困境中的选择
#  =============================
# 解答方式一:
cishu=0  #记录实验的次数
while True:
    A=input('A,你认罪吗?请回答认罪或者不认')
    B=input('B,你认罪吗?请回答认罪或者不认')
    cishu=cishu+1   # 每循环一次,试验次数加1次
    if (A=='认罪' and B=='认罪'):    #  ==表示等于  !=表示不等于 
        A=B='判决10年'
    elif (A=='认罪' and B!='认罪'):
        A='认罪,判决1年'
        B='不认罪,判决20年'
    elif (A!='认罪' and B=='认罪'):
        A='不认罪,判决20年'
        B='认罪,判决1年'
    else:
        A=B='不认罪,判决3年'
        break
print('实验次数:',cishu)
print('A',A,'\nB',B)  # \n表示换行

【以下为代码,右上角有复制按钮,可一键复制】

# 解答方式二(标准答案):
n = 0
list_answer = []

while True:
    n += 1
    a = input('A,你认罪吗?请回答认罪或者不认:')
    b = input('B,你认罪吗?请回答认罪或者不认:')
    list_answer.append([a,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

print('第' + str(n) + '对实验者选了最优解。')

for i in range(n):
    # 注意数据类型的转换,以及计数起点的不同(0和1)
    print('第' + str(i+1) + '对实验者的选择是:' + str(list_answer[i]))

相关文章

网友评论

    本文标题:Python笔记-囚徒困境及记录困境中的选择

    本文链接:https://www.haomeiwen.com/subject/nwnnfhtx.html