天天看点

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

【功能】

学习的代码:囚徒困境练习题( 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]))