我目前正在学校的编程课上为我的期末考试制作一个二十一点项目,但我目前在另一个项目中运行功能时遇到了问题。我想要发生的事情是,如果我洗牌的牌列表中有一张国王,王后,杰克或王牌,我希望你的积分能够达到正确数量。但是出于某种原因,程序只是忽略列表中的那些值并跳转到下一个整数。这是列表['Ace',2,3,4,5,6,7,8,9,10,'代客','Dame','Roi']
def valeurs(somme,main):
ace = 'Ace'
dame = 'Dame'
roi = 'Roi'
valet = 'Valet'
for ace in main:
if somme <= 10:
somme += 11
else:
somme += 1
for dame in main:
somme += 10
for roi in main:
somme += 10
for valet in main:
somme += 10
def jeu(carte,somme):
nombreCarte = 0
compteur = 0
while nombreCarte < 5 and somme < 21 or somme < 21:
main.append(carte[compteur])
if main[compteur] == 'Ace' or main[compteur] == 'Dame' or
main[compteur] == 'Roi' or main[compteur] == 'Valet':
valeurs(somme,main)
nombreCarte += 1
else:
if type(main[compteur]) != int:
valeurs(somme,main)
else:
somme += main[compteur]
nombreCarte += 1
compteur += 1
print (main,somme)
答案 0 :(得分:0)
当你有for ace in main:
(以及其他三个循环)时,这将遍历main并使ace等于main中的每个元素,就像for i in range(10)
将使i等于数字0- 9。我不知道黑杰克的规则,但我认为你想要做的是:
for i in main:
if i==ace:
if somme <= 10:
somme += 11
else:
somme += 1
然后将相同的更改应用于其他for循环。
答案 1 :(得分:0)
函数valeurs
包含语义错误。特别是这些行:
ace = 'Ace'
...
for ace in main:
if somme <= 10:
somme += 11
else:
somme += 1
在上面的for循环中,为ace
分配了一个对应的临时值
在每次迭代期间到列表中的当前项。
这意味着somme
是循环的主体根据somme
的值递增而不考虑手实际上是ace = 'Ace'
中定义的ace
同样适用于dame
,roi
和valet
卡片。
这是因为在python中,for loop
作为foreach loop
运行,请参阅https://en.wikipedia.org/wiki/Foreach_loop了解详情。
解决此问题的方法如下
for card in main:
if card == ace and somme <=10:
somme += 11
elif card == ace and somme > 10:
somme += 1
elif card in (dame, roi, valet):
somme += 10
像@John Gordon所说,条件nombreCarte < 5 and somme < 21 or somme < 21
应该重构为:
nombreCarte < 5 and somme < 21
。
可以说更多,但这应该让你去
答案 2 :(得分:0)
希望这有助于纠正/修改
def valeurs(main):
somme = 0
# add all values that do not change
for carte in main:
if cart != 'Ace'
if cart == 'Dame' or cart == 'Roi' or cart =='Valet':
somme += 10
else:
somme += int(cart) #if it a string, no issue
# your code always adds 11 for the first ace, and then 1 after
# this can be a problem if you have 2 'Ace' and a 'Dame'!
# card order: ace, ace, ace, 9
#11 + 1 + 1 + 9 = 22 OR 9 + 1 + 1 + 1 + (0 if greater than 12, 10 if less)
# 12 + (0)
# a) 22 -> bust
# b) 12 -> no bust
# now add values that may change! (1 or 11)
somme += main.count('Ace')
if main.count('Ace') > 0 and somme < 12:
somme += 10
return somme
def jeu(carte):
main = [] # where did you declare
# main to be a list?
# can't main.append
while valuers(main) < 21 and len(main) < 5:
# no need for 'nombreCarte'
# - len(main) does it
# does main length matter?
main.append(carte(as_hasard)) #append only strings?
#main.append(str(as_hasard))
#replace cart(comptuer)?
[print (str(carte)) for carte in main] #print all values in hand
if len(main) >= 5 and valuers(main) <= 21:# check results
print ("5 carte - no bust win")
else:
print valuers(main)
加入 这让我烦恼,我回来找到了它。
valeurs(somme,main)
valeurs()调用不会更改jeu()函数中somme的值 有valeurs()返回somme,然后你可以使用这个
somme = valeurs(somme, main)