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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python循环报数游戏_python经典面试题之一:猴子报数

發布時間:2025/5/22 python 14 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python循环报数游戏_python经典面试题之一:猴子报数 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

在與python相關的面試中,很經常能看到這樣類似的一道題:

有13只猴子圍成一圈,編號分別為1~13,從1開始報數,報到10之后,下一個猴子又重新由1報起,每逢報到7的猴子出局,請設計程序,求得最終留下來的那一只猴子的編號。

以前,我的解法是老老實實地寫幾個循環嵌套,不過其實有更加省事的辦法:使用字典!

以字典的鍵(int類型的1-13)作為猴子的編號,以他們對應的鍵值作為猴子當前的狀態(報到幾號數或者是已出局),定義字典的時候可以設置一個初值給它們。然后,設報數號為1,通過輪巡1-13號猴子進行報數,已出局的猴子跳過,未出局的猴子報數,報完判斷當前猴子報的是否為7,是則將該猴子的狀態設置為出局,然后報數號繼續+1,到10之后又重置為1,猴子號數也是,報到13號猴子以后重置為1號猴子。最后通過判斷是否已經有12只猴子出局,即可結束該循環。

代碼如下:

monkey = {i + 1: "" for i in range(13)}

callnumber = 1

try:

while True:

for m in range(1, 14):

if monkey[m] != "out":

monkey[m] = callnumber

if callnumber == 7: monkey[m] = "out"

callnumber += 1

if callnumber > 10: callnumber = 1

if list(monkey.values()).count("out") == 12: raise TypeError

except:

[print("\nmonkey:{} is win".format(k)) for k, v in monkey.items() if v != "out"]

這里我還是用了兩層循環,通過try...except加raise Error來一次性打破多重循環,實際上也可以做成一層循環,只做while True的就可以,里面的for循環可以自建一個循環計數器變量來替代掉。

也有使用列表的做法,當然,上一篇文章提到了高手通過極限縮減代碼行數來秀技能,那在這個場景也是可以這樣玩的

status = [[0 for i in range(13)], 1, 0]

while 1:

if status[0][status[2]] != -1:

status[0][status[2]] = status[1]

if status[1] == 7: status[0][status[2]] = -1

status[1] += 1

if status[1] > 10: status[1] = 1

if status[0].count(-1) == 12: break

status[2] += 1

if status[2] == len(status[0]): status[2] = 0

[print("monkey:{} is win".format(index + 1)) for index, k in enumerate(status[0]) if k != -1]

這段代碼讓人難受的地方在于,你要是不將status[0],status[1],status[2]替換成別的變量,你需要花費超級多的經歷去看懂這段代碼,玩兒嘛,哈哈哈!僅供參考,不喜勿噴~

總結

以上是生活随笔為你收集整理的python循环报数游戏_python经典面试题之一:猴子报数的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。