1

这感觉像是一个愚蠢的问题,但我正在空白将字符串转换为 int 值的方法,然后在打印实际字符串的同时保持先前分配的值。

我写了一个简单的例子来尝试解释我在做什么;假设没有相等的值。

unshuffled_list = [2,3,4,5,6,7,8,9,10,'J','Q','K','A']
random.shuffle(unshuffled_list)
aDeck = []
bDeck = []
aDeck = unshuffled_list[0:26]
bDeck = unshuffled_list[26:53]

i = 0

while i <= len(aDeck):
    print("Player A: {}\nPlayer B: {}".format(aDeck[i],bDeck[i]))
    if aDeck[i] > bDeck[i]:
        print("Player A wins!\n")
    if aDeck[i] < bDeck[i]:
        print("Player B wins!\n")
    i += 1

这段代码中断了,不是开玩笑,因为它不能将字符串与 int 进行比较,但是否可以打印出这种类型:

Player A: 9
Player B: Q
Player B Wins!

基本上,它打印出列表中包含的实际字符串,但维护分配给它的 int 变量。

我已经通过使用一个 int 值列表来让这段代码工作,但为了学习,我想知道是否可以这样做。

我还试图弄乱 str() 和 int(),但没有任何运气。

4

2 回答 2

1

使用字典将命名卡片映射到它们的值。

cardValue = { 'J': 11, 'Q': '12', 'K': 13, 'A': 14}
def getCardValue(c)
    return cardValue[c] if c in cardValue else c

while i <= len(aDeck):
    print("Player A: {}\nPlayer B: {}".format(aDeck[i],bDeck[i]))
    cardA = getCardValue(aDeck[i])
    cardB = getCardValue(bDeck[i])
    if  cardA > cardB:
        print("Player A wins!\n")
    elif cardA < cardB:
        print("Player B wins!\n")
    else:
        print("It's a tie!\n")
    i += 1
于 2013-11-05T02:49:08.030 回答
0

不要担心整数与字符串的关系。您可以将数组保持原样,使用混合类型。在任何时候都不需要将字符串转换为整数,反之亦然。

random.shuffle(unshuffled_list)洗牌unshuffled_list到位。即你失去了原来的排序顺序。因此,让我们从保留副本开始:

from copy import copy
shuffled_list = copy(unshuffled_list)
random.shuffle(shuffled_list)

unshuffled_list然后替换代码中的所有引用shuffled_list。这也使您的代码更具自我记录性。

然后当需要比较两张卡时,而不是这样:

if  cardA > cardB:
    ...

做这个:

if unshuffled_list.index(cardA) > unshuffled_list.index(cardB):
    ...

您可以将该比较解读为“如果 unshuffled_list 中 cardA 的索引大于 cardB 的索引”。这会奏效,希望这很清楚。祝你好运!

于 2013-11-05T03:04:34.453 回答