天天看點

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]))