2 回答

TA貢獻(xiàn)1777條經(jīng)驗(yàn) 獲得超10個(gè)贊
您不是在玩家選擇站立后檢查結(jié)果。由于您只deal()在while True循環(huán)之前一次,如果您選擇重復(fù)站立,您只會(huì)得到無限條件。莊家抽完所有牌后計(jì)算分?jǐn)?shù)。
def hit_stand(deck, player, dealer, hand, stand):
print("What would you like to do")
print("[1] - Hit\n[2] - Stand")
choice = input("> ")
hand = False
if choice == '1':
player.append(deck.pop())
elif choice == '2':
stand = True
while score(dealer) <= 16:
print(score(dealer))
dealer.append(deck.pop())
display_info(player, dealer, stand)
results(player, dealer, first_hand, stand) # HERE
順便說一句,在確定最終得分后退出游戲并不是很優(yōu)雅。你會(huì)想看看比一個(gè)更好的結(jié)構(gòu)while True:,并sys.exit()以控制流,但是這是你的一個(gè)鍛煉。
最后,您不應(yīng)該sum在內(nèi)部用作變量名,score()因?yàn)檫@是您正在重新定義的內(nèi)置函數(shù)。使用類似的東西,total這樣你就不會(huì)冒著掩蓋內(nèi)置函數(shù)本身的風(fēng)險(xiǎn)。

TA貢獻(xiàn)1794條經(jīng)驗(yàn) 獲得超8個(gè)贊
我想添加另一個(gè)注釋,因?yàn)槲艺J(rèn)為這是關(guān)于 Python 如何工作的一個(gè)非常重要的點(diǎn)。這是具有 C/C++/Java 背景的人(即我們幾乎所有人)在使用 Python 時(shí)需要取消學(xué)習(xí)的東西。
正如我在上面的評(píng)論中所述,在 Maria Laura 的原始代碼中,似乎調(diào)用hit_stand
是打算使用某些變量(例如stand
)作為輸出變量,而在 Python 中,我們不能在函數(shù)調(diào)用中使用“輸出變量” . 但是 Maria Laura 提到“命中效果很好”,這意味著參數(shù)player
正在被修改。那么,如果我們不能有“輸出變量”,那么為什么player
函數(shù)修改了值hit_stand
?
當(dāng)代碼調(diào)用 時(shí)hit_stand
,會(huì)向函數(shù)傳遞五個(gè)對(duì)象:
一個(gè)名為 的列表對(duì)象
deck
,一個(gè)名為 的列表對(duì)象
player
,一個(gè)名為 的列表對(duì)象
dealer
,一個(gè)布爾對(duì)象,命名為
hand
,一個(gè)布爾對(duì)象,命名為
stand
此函數(shù)外的代碼也有(deck, player, dealer, first_hand, standing)
指向這五個(gè)相同對(duì)象的名稱。內(nèi)的代碼hit_stand
的.append()
方法,呼吁player
和dealer
列表對(duì)象和.pop()
方法被稱為上deck
對(duì)象,所以所有的對(duì)象都發(fā)生突變。來自調(diào)用范圍的名稱仍然指向那些相同的對(duì)象,因此這些名稱現(xiàn)在將看到這些更改。
這個(gè)故事的hand
和stand
是不同的。在hit_stand
函數(shù)內(nèi)部,hand
并stand
使用=
運(yùn)算符分配新值。正如Fredrik Lundh 的這篇優(yōu)秀文章所述=
,Python 中的運(yùn)算符不會(huì)“更改”變量,它只需要一個(gè)對(duì)象并將其綁定到一個(gè)名稱。 對(duì)象本身沒有改變,而是被新的布爾對(duì)象替換了。所以standing
外部作用域中的變量仍然指向它原來的布爾對(duì)象,而stand
函數(shù)內(nèi)部的變量指向的是一個(gè)全新的布爾對(duì)象,與外部作用域中的不同。沒有什么我們可以做的變量hand
和stand
這將在外部范圍內(nèi)看到,不能像我們?cè)谄渌Z言中那樣存在“通過引用傳遞”或“輸出參數(shù)”之類的東西。
這是一個(gè)起初看起來很陌生的概念,直到我們忘記在 C/C++/Java 教育中學(xué)到的東西。
添加回答
舉報(bào)