【问题标题】:creating a variable number of variables and populating them from a list创建可变数量的变量并从列表中填充它们
【发布时间】:2019-11-04 04:54:36
【问题描述】:

我正在尝试同时创建几个变量。

我希望用户指定一个值,然后创建许多唯一变量,用已创建列表中的值填充它们,然后打印结果。

如果我每次都指定变量的数量,我可以这样做,但我希望程序改为询问用户的数量。

这如我所愿;但是,它假设我知道要创建的手数

Deck = ["AC","AH","AS","AD","KC","KH","KS","KD"]
Hand1 = [Deck.pop(),Deck.pop()]
Hand2 = [Deck.pop(),Deck.pop()]
...
HandN = [Deck.pop(),Deck.pop()]

print("Hand1: ", Hand1)
print("Hand2: ", Hand2)
...
print("HandN: ", HandN)

我也想做同样的事情,而是询问用户要创建多少手,例如:

Deck = ["AC","AH","AS","AD","KC","KH","KS","KD"]
NumberOfHands = int(input("How Many Hands? "))

for each in range(1,NumberOfHands+1):
    Hand+str(each) = [DeckList.pop(),DeckList.pop]

for each in range(1,NumberOfHands+1):
    print(Hand+str(each))

我认为这会导致语法错误。

我看到了一些其他看起来相似的问题,并暗示用字典来做这件事;但是,在这种情况下如何应用它对我来说没有意义......

感谢您的帮助!

【问题讨论】:

  • 任何时候你想创建一堆名称如HandN的变量,创建一个列表hand并通过N访问它——hand[0],hand[1] , ...等等。
  • 我认为主要问题是试图定义“Hand+str(each)”变量——你不能这样构造它们!正如@MarkMeyer 提到的,您可以构建一个“手”列表

标签: python python-3.x input


【解决方案1】:

以下是如何使用 dict:

hands = {f"Hand{each + 1}": [Deck.pop(), Deck.pop()] for each in range(NumberOfHands)}

这将创建一个大小为NumberOfHands 的字典,其中包含从1NumberOfHands 的所有手牌

【讨论】:

  • 这行得通,我认为它还可以通过将数据以良好的格式向前使用来给我最好的药水。谢谢!
【解决方案2】:

你可以的

但你不应该

Deck = ["AC","AH","AS","AD","KC","KH","KS","KD"]
NumberOfHands = int(input("How Many Hands? "))
for n in range(1,NumberOfHands+1):
  globals()["Hand" + str(n)] = [Deck.pop(),Deck.pop()]

for n in range(1,NumberOfHands+1):
    print( globals()['Hand{}'.format(n)])

示例:

How Many Hands? 4
['KD', 'KS']
['KH', 'KC']
['AD', 'AS']
['AH', 'AC']

这是一种肮脏的方法,但是说真的,考虑只创建一个变量并将它们存储在一个列表中,并通过索引访问它们,这样更安全。

考虑阅读这个不错的博客:http://stupidpythonideas.blogspot.com/2013/05/why-you-dont-want-to-dynamically-create.html

【讨论】:

  • 感谢博客参考;这是一本好书。我也非常感谢您展示了肮脏的解决方案,对于这种情况,因为我认为将我的手牌列表放入字典中对于我希望程序稍后与它们进行交互最有意义。这是一个很好的答案,即使它不是我要实际使用的答案。谢谢!
猜你喜欢
  • 2023-03-06
  • 1970-01-01
  • 2019-02-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多