如何更改列表中的元素?

Posted

技术标签:

【中文标题】如何更改列表中的元素?【英文标题】: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 没有转换为整数... 【参考方案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)

【讨论】:

以上是关于如何更改列表中的元素?的主要内容,如果未能解决你的问题,请参考以下文章

如何更改列表中的元素?

如何在 FOR 循环中对 Python Pandas 列表中的元素执行字符串更改

Flutter - 如何访问 ListView.builder 中的一个元素?

更改一个列表中的元素会更改多个列表[重复]

单击 Mapbox 中的地图标记后更改其他 HTML 元素?

为啥我的数组列表只更改一个元素中的数据?