如何更改列表中的元素?
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 中的一个元素?