在另一个函数中不调用函数

时间:2018-01-18 03:09:22

标签: python python-3.x

我目前正在学校的编程课上为我的期末考试制作一个二十一点项目,但我目前在另一个项目中运行功能时遇到了问题。我想要发生的事情是,如果我洗牌的牌列表中有一张国王,王后,杰克或王牌,我希望你的积分能够达到正确数量。但是出于某种原因,程序只是忽略列表中的那些值并跳转到下一个整数。这是列表['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)

3 个答案:

答案 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

同样适用于dameroivalet卡片。

这是因为在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)