日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > python >内容正文

python

❤️震惊!人生苦短,我用python来玩田忌赛马❤️

發(fā)布時(shí)間:2025/3/15 python 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ❤️震惊!人生苦短,我用python来玩田忌赛马❤️ 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

一讀標(biāo)題笑死自己哈哈哈,最近豬哥(玩得敲好的彭友)找我?guī)兔鉀Q他不會(huì)作業(yè)哈哈哈,他們公司自己出的筆試題哈哈哈,希望別被他們出題人看見哈哈哈,回想豬哥說的一句話,萬一這就是以后你遇到的試題呢哈哈哈。突然發(fā)現(xiàn)自己已經(jīng)小半年沒玩Python了,一上手手都生了,還真是那句話,三天不摸手生了都。

https://blog.csdn.net/hanhanwanghaha寶藏女孩 歡迎您的關(guān)注!
歡迎關(guān)注微信公眾號(hào):寶藏女孩的成長日記
讓這個(gè)可愛的寶藏女孩在努力的道路上與你一起同行!
如有轉(zhuǎn)載,請注明出處(如不注明,盜者必究)

關(guān)于田忌賽馬的拙見

  • 使用 python 函數(shù)實(shí)現(xiàn)田忌賽馬
    • 要求一
    • 要求二
    • 要求三

使用 python 函數(shù)實(shí)現(xiàn)田忌賽馬

要求一

現(xiàn)在我們
將田忌的馬抽象為一個(gè)列表 [2,5,8],
齊王的馬抽象為另一個(gè)列表 [3,6,9],
分別代表各自的下、中、上等馬(我自己讀到這里就記住值越大,馬越好,這樣理解就不會(huì)錯(cuò)了)。
設(shè)計(jì)一個(gè)函數(shù) race(),將兩個(gè)列表作為參數(shù)傳遞給race(),將策略抽象為代碼使田忌贏得比賽,函數(shù)返回每輪對(duì)陣情況:
上代碼

# coding=utf-8 from typing import *def race(tian: List[int], qi: List[int]) -> List[List[int]]:# 給兩個(gè)列表的數(shù)排序tian.sort()qi.sort()# 把最弱的放到最后# 這里運(yùn)用了索引的知識(shí),第一個(gè)索引是除了第一個(gè)元素不取(也就是索引為0的)其他的都取;# 第二個(gè)是取到第一個(gè)元素,然后作為一個(gè)列表里面的一個(gè)元素tian = tian[1:] + [tian[0]]# 返回每輪對(duì)陣情況return list(zip(tian, qi))if __name__ == '__main__':tianji = [2, 5, 8]qiwang = [3, 6, 9]result = race(tianji, qiwang)print(result)

要求二

現(xiàn)在將馬分為 劣 、下、中、上、優(yōu)五等,五局三勝制,抽象為列表[2,4,6,8,10] 與 [1,3,5,7,9] ,其他條件不變(齊王仍然準(zhǔn)守規(guī)則,田忌繼續(xù)不按照套路出牌),計(jì)算出田忌有多少種贏得比賽的可能
上代碼

# coding=utf-8 import itertoolsdef race(qiwang, tianji):# 用迭代獲取田忌所有派遣馬匹的方式(['13579',5])tianji_l = list(itertools.permutations(tianji, len(tianji)))# 全部賽果result = []# 遍歷所有的賽馬方式for i in tianji_l:# 一輪的比賽結(jié)果result_1 = []# 一輪比拼中,雙方馬匹對(duì)陣情況,i為tianji(i是從tianji_l獲取的)for horses in zip(i, qiwang):# 如果田忌的馬值比齊王的小if horses[0] < horses[1]:# 那這一輪就是田忌輸result_1.append('lose')else:# 反之,這一輪就是田忌贏result_1.append('win')# 如果這一輪贏三次及以上if result_1.count('win') >= 3:# 田忌就贏了,將贏了的追加到result里面result.append('win')return len(result)if __name__ == '__main__':tian = [1, 3, 5, 7, 9]qi = [2, 4, 6, 8, 10]all_result = race(qi, tian)print(all_result)

要求三

如果你是齊王,已知同級(jí)別中己方的馬優(yōu)于田忌的馬,事先不知道對(duì)方派遣順序,不過可以根據(jù)上一輪對(duì)方的派出的馬匹制定本輪的選擇。制定一種派遣策略,使贏得比賽的幾率最大。

第三題我是真不知道咋做了(想這個(gè)腦子都長草了!這是親爺熬夜給我想出來的,可能不是最優(yōu),需要點(diǎn)聰明腦子,如果有更好的想法可以私信我,歡迎討論)

解題思路
田忌以劣勝優(yōu)的策略在于輸?shù)臅r(shí)候輸?shù)谋容^多,但是贏的時(shí)候只是微弱優(yōu)勢贏
如 10-1 8-9 6-7 4-5 2-3 (齊王1:田雞4)
那想讓齊王盡可能獲勝的辦法就是拉開這個(gè)「微弱優(yōu)勢」

方法
齊王第一次排出2的
往后每次分兩種情況,
1.田忌贏了,那我們就可以拿出上輪田忌的x-1的參加下一輪。
2.田忌輸了,可以繼續(xù)拿當(dāng)前最小的出來。
如果x-1的沒了,就出最差的那匹,如此循環(huán)

這種方法仍然會(huì)失敗 如田忌按照3 5 7 9 1這樣出

上代碼

# coding=utf-8from itertools import permutations from typing import *tian = [1, 3, 5, 7, 9] qi = [2, 4, 6, 8, 10]def play() -> float:global qiwin_count = 0cnt = 0for a, b, c, d, e in permutations(tian, 5):qi = [2, 4, 6, 8, 10] # 復(fù)原cnt += 1tian_rank = [a, b, c, d, e]qi_rank = [qi.pop(0)] # 初始化for index, last_tian in enumerate(tian_rank[:4]):qi_rank.append(strategy(last_tian, qi_rank[index] > tian_rank[index])) # 每次根據(jù)上一次tian的和輸贏制定策略# 根據(jù)兩個(gè)rank算輸贏win_count += winner(qi_rank, tian_rank)# 返回概率return float(win_count) / float(cnt)def strategy(last_tian: int, is_win: bool) -> int:global qi# 如果齊王上輪贏了,繼續(xù)拿最小的出來if is_win:return qi.pop(0)# 如果齊王上輪輸了else:# 如果x-1的存在,就拿出來if last_tian - 1 in qi:return qi.pop(qi.index(last_tian - 1))# 否則還是拿最小的else:return qi.pop(0)def winner(qi: List[int], tian: List[int]) -> bool:cnt = 0for q, t in zip(qi, tian):cnt += q > treturn cnt >= 3if __name__ == '__main__':print(play())

這樣算出來的概率是0.075,

感覺前面兩個(gè)算法題加油扣腦殼是可以湊合寫出來的,第三個(gè)是真難度(當(dāng)然對(duì)于大佬來說小事一樁)

https://blog.csdn.net/hanhanwanghaha寶藏女孩 歡迎您的關(guān)注!
歡迎關(guān)注微信公眾號(hào):寶藏女孩的成長日記
讓這個(gè)可愛的寶藏女孩在努力的道路上與你一起同行!
如有轉(zhuǎn)載,請注明出處(如不注明,盜者必究)

總結(jié)

以上是生活随笔為你收集整理的❤️震惊!人生苦短,我用python来玩田忌赛马❤️的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。