【问题标题】:How do i change elements in a list?如何更改列表中的元素?
【发布时间】:2021-11-16 20:20:10
【问题描述】:

我正在制作一个模拟二十一点游戏的程序。我需要考虑的一件事是皇家牌(国王、王后等)。对于这些,值应更改为 10。我希望游戏能够精细地打印出庄家是否拥有这些牌中的任何一张,但我需要添加一个“分数”,但我无法将一个 int 与字符串对象相加。我尝试通过在经销商函数中引入一个 for 循环来用值 10 替换每个皇室成员来解决这个问题,但是当我返回“分数”时,似乎值没有改变,因为我收到错误:

第 22 行,在经销商处 score=cards[0]+cards[1]

TypeError: +: 'int' 和 'str' 的操作数类型不受支持

我的代码在:

import random

deck=[2,3,4,5,6,7,8,9,10,'A','J','Q','K']*4

#Deal cards from deck
def deal(deck):
    cards=[]
    for i in range(2):
        cards.append(random.choice(deck))
    return cards

#Dealers hand
def dealer():
    cards=deal(deck)
    
    for i in range(len(cards)):
        royals=['J','Q','K']
        if i in royals:
            cards[i]=10
            score=cards[0]+cards[1]
        else:
            score=cards[0]+cards[1]
    

    return (f'Dealer has the cards {cards[0]} and ?', score)

【问题讨论】:

  • 请连同错误一起发布完整的跟踪
  • 您发布的代码对我来说完美运行。
  • 我想你忘记在皇室成员名单中添加“A”
  • 否,因为 A 的值应该是 11,而不是 10。当庄家拿到 J、Q 或 K 牌时,代码不起作用。
  • 因为当庄家拿到 K 和 5 作为一个列表(他们的手牌)时,K 应该变成 10,然后与 5 相加,分数应该是 15,但由于某种原因,K 没有转换为整数...

标签: python list function for-loop blackjack


【解决方案1】:

不使用 J ,Q ,K 分别使用 11,12,13 等数字,然后它会添加分数。

【讨论】:

  • 不,因为 J,Q,K 在 print 语句中应该被格式化为 J,Q,K,但是当将其相加以将其存储为“分数”时,它应该是一个整数。还有 J,Q,K 我希望它们值 10 分。
【解决方案2】:

您似乎正在修改cards 超出范围。尝试将卡片作为参数传递给函数并返回它。我可能错了。

似乎更好的解决方案可能是将面卡的值放在列表中(1、11、12、13),然后执行+min(cards[i], 10) 之类的操作,并对 A 进行特殊检查。

我还建议直接迭代列表项而不是整数索引。

【讨论】:

    【解决方案3】:

    问题是你在检查两张牌是否都是数字之前评估分数。因此,当最后一张卡片是字母时,您会收到错误消息。

    def dealer():
        cards = deal(deck)
    
        for i in range(len(cards)):
            royals = ['J', 'Q', 'K']
            if cards[i] in royals:
                cards[i] = 10
            elif cards[i] == 'A':
                cards[i] = 11
    
        score = sum(cards)
        return (f'Dealer has the cards {cards[0]} and ?', score)
    

    这是如果你想使用字母,使用 11,12,13 会更容易。

    如果您不想更改原始列表,这会更容易:

    def dealer():
        cards = deal(deck)
        score = 0
        for i in range(len(cards)):
            royals = ['J', 'Q', 'K']
            if cards[i] in royals:
                score += 10
            elif cards[i] == 'A':
                score += 11
            else:
                score += cards[i]
    
        return (f'Dealer has the cards {cards[0]} and ?', score)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-23
      • 2011-06-14
      • 2019-10-21
      • 1970-01-01
      • 2014-01-03
      相关资源
      最近更新 更多