【问题标题】:Replacing the value 1 with the word Ace in a deck of cards将值 1 替换为一副牌中的 Ace
【发布时间】:2020-12-16 14:36:24
【问题描述】:

我们受命制作一个洗牌的程序。我对编程还是很陌生,所以这对我来说并不是最简单的任务。我们得到了对 itertools 进行一些研究的提示,所以这就是我所做的。我目前的程序如下:

import itertools
import random

deck = list(itertools.product(range(1,14),['Heart','Spade','Club','Diamond']))

random.shuffle(deck)

print("Order of deck:")
for i in range(52):
    print(deck[i][0], "of", deck[i][1])

如果你运行它,你会得到:

Order of deck:
9 of Heart
10 of Diamond
2 of Spade
1 of Heart
11 of Spade
4 of Diamond
10 of Heart
...

如我所愿,你会得到一个洗牌的牌组。

剩下要做的就是将 1 的值更改为“Ace”,将 11 更改为“Jack”,...

但我不知道该怎么做,因为我的列表“牌组”由 52 个项目组成,每张卡都是一个元组。例如

deck[0] = (1, 'Spade')

到目前为止,我学会替换的唯一东西是

deck.replace(1,"Ace")

for n, i in enumerate(deck):
    if i == 1:
        deck[n] = "Ace"

但是这两个都不起作用。 第一个不起作用,因为我的套牌不是字符串,而是列表。 如果我运行第二个没有任何变化,输出与没有那段代码时完全相同。

总而言之,我想在我的小程序中将 1 更改为“Ace”,然后我可以将 11 更改为“Jack”,... (抱歉英语不好,希望一切都清楚)

【问题讨论】:

    标签: python python-3.x


    【解决方案1】:

    有两种方法可以实现这一点,具体取决于您要执行的操作。如果您想捕捉 Jack 的值为 11 的概念,那么您只需要更改显示的值(即在打印之前检查并将11 替换为Jack 等)。但是,如果值不是特别重要,那么您可以在创建时摆弄牌组:

    deck = list(itertools.product(["A", *range(2,11), 'J', 'Q', 'K'],['Heart','Spade','Club','Diamond']))
    

    【讨论】:

    • 这在 print(deck[i][0], "of", deck[i][1]) 行给出了 IndexErrox(列表索引超出范围),但它也返回了输出像“心脏的范围(2,11)
    • @ZinoWR:哎呀!抱歉,我有一个错字(注意*)。立即查看:)
    【解决方案2】:

    使用您想要显示的字符串创建您的列表:

    values = ['Ace'] + [str(i) for i in range(2,11)] + ['Jack', 'Queen', 'King']
    suits = ['Heart', 'Spade', 'Club', 'Diamond']
    deck = list(itertools.product(values, suits))
    

    【讨论】:

      【解决方案3】:

      您无需更换任何东西。您可以使用函数返回适当的字符串值

      def get_face(x):
          if x == 1:
              return 'Ace' 
          elif x == 11:
              return 'Jack' 
          else:  # TODO: add others 
              return x
      
      for card in deck:
          print(get_face(card[0]), "of", card[1])
      

      【讨论】:

      • 这也修复了它,但我只能给一个绿色检查,另一个更短?
      猜你喜欢
      • 2017-10-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多