【问题标题】:How do I select a random element from a 2d list如何从二维列表中选择随机元素
【发布时间】:2020-10-22 22:30:06
【问题描述】:

我正在尝试在 python 的二维列表中选择一个随机元素。 我正在创建一个二十一点游戏。

我知道这段代码有多长且未经优化,但我是编程新手,我想通过犯错误来学习。

这是我设置的初始代码。我创造花色(黑桃、梅花、红心、方块)。我将它附加到名为 list_of_cards 的列表中,该列表被初始化为一个空数组。

然后我有另一个名为 player_card 的列表供玩家查看。这里供参考。

list_of_suits= []       #Creating list of cards
player_card  = []

king_of_spades  =  10   #Creating face cards for the spades deck.
queen_of_spades =  10   
jack_of_spades  =  10

king_of_clubs  =  10   
queen_of_clubs =  10      
jack_of_clubs  =  10

king_of_hearts  =   10   
queen_of_hearts =   10    
jack_of_hearts  =   10

king_of_diamonds  =  10   
queen_of_diamonds =  10 
jack_of_diamonds  =  10

ace_of_spades =   [1,11]     # Aces are either 1 or 11
ace_of_clubs =    [1,11]
ace_of_hearts =   [1,11]
ace_of_diamonds = [1,11] 


spades = [ace_of_spades,2,3,4,5,6,7,8,9,10, jack_of_spades, queen_of_spades, king_of_spades]
clubs =  [ace_of_clubs,2,3,4,5,6,7,8,9,10, jack_of_clubs, queen_of_clubs, king_of_clubs]
hearts =  [ace_of_hearts,2,3,4,5,6,7,8,9,10, jack_of_hearts, queen_of_hearts, king_of_hearts]
diamonds =  [ace_of_diamonds,2,3,4,5,6,7,8,9,10, jack_of_diamonds, queen_of_diamonds, king_of_diamonds]

list_of_suits.append(spades)
list_of_suits.append(clubs)
list_of_suits.append(hearts)
list_of_suits.append(diamonds)

这是随机卡片的选择器。它将遍历数组以随机选择四张牌中的一张。接下来,它将进入该数组并选择一张随机卡片。

random_list_of_suits = random.choice(list_of_suits)

random_card_number = random.choice(random_list_of_suits)    
random_list_of_suits.remove(random_card_number)
player_card.append(random_card_number)

print player_card
print list_of_suits

这是我想要弄清楚的:如何每次都创建一个新的随机数?

我有点卡住了,我试着让它通过一个 for 循环,但如果我把 random_card_number 放在一个循环中,它会选择它最初执行四次的同一张随机卡。

【问题讨论】:

  • random.choice(list_of_suits)放在循环中,不要传入变量。
  • 在更广泛的范围内,如果每张牌都是自我描述的,那不是更好吗?您可以将它们全部扔到一个“牌组”列表中,然后洗牌并从牌组中取出一张牌顶部(poping 列表?)考虑为所有花色做类似spades = [(ace_of_spades, 'spades'), (2, 'spades'), (3, 'spades') ...] 之类的事情,然后把你的牌堆放在一起。
  • 显然,如果您准备好进入 OOP,则可以通过更大程度的控制来解决此问题,但我认为这是会产生最大影响的最小更改。

标签: python python-2.7 nested-lists


【解决方案1】:
import random

list2d = [range(0, 5), range(5, 10), range(10, 15), range(15, 20)]

for i in range(0, 10):
    random_suite = random.choice(list2d)
    random_card = random.choice(random_suite)
    print random_suite, random_card                               

输出:

[5, 6, 7, 8, 9] 7
[5, 6, 7, 8, 9] 5
[5, 6, 7, 8, 9] 5
[10, 11, 12, 13, 14] 11
[10, 11, 12, 13, 14] 13
[10, 11, 12, 13, 14] 12
[10, 11, 12, 13, 14] 14
[10, 11, 12, 13, 14] 10
[10, 11, 12, 13, 14] 10
[0, 1, 2, 3, 4] 2

【讨论】:

    【解决方案2】:

    您在 random.choice() 中输入的列表必须是一维数组。 所以你可以这样做,

    random_list_of_suits = np.random.choice(list_of_suits) # you can get spades/clubs/hearts/diamonds
    index_of_random_card_number = random.choice(len(random_list_of_suits))
    random_card = random_list_of_suits[index_of_random_card_number] # You get a random card 
    

    【讨论】:

      【解决方案3】:
      #include <stdafx.h>
      #include <iostream>
      #include <cstdlib> // for rand() and srand()
      #include <ctime> // for time()
      using namespace std;
      
      int main()
      {
      
          srand(time(0)); // set initial seed value to system clock
          for (int nCount=0; nCount < 100; ++nCount)
          {
              cout << rand() << "\t";
      
              if ((nCount+1) % 5 == 0)
                  cout << endl;
          }
      

      srand 使用时间作为第一个初始种子来创建您的随机数,因此每次运行程序时您都会得到一个不同的随机数,因为最终种子会随着时间而变化。

      【讨论】:

      • 我想你可能在错误的问题上发布了这个?
      • 答案需要在 Python 中
      猜你喜欢
      • 1970-01-01
      • 2013-10-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-30
      • 1970-01-01
      • 1970-01-01
      • 2014-02-07
      相关资源
      最近更新 更多