【问题标题】:I get a TypeError when i try to list an array using a variable [duplicate]当我尝试使用变量列出数组时出现 TypeError [重复]
【发布时间】:2021-03-29 17:28:11
【问题描述】:

我想做的是创建一个卡片绘图程序,但无论出于何种原因,我都无法使用变量来实际跟踪我应该使用的列表

from random import shuffle
cards=list(['Ace of Spades','Spades 1','Spades 2','Spades 3','Spades 4','Spades 5','Spades 6','Spades 7','Spades 8', 'Spades 9','Spades 10', 'Jack of Spades','Queen of Spades','King of Spades','Ace of Diamonds','Diamonds 1','Diamonds 2', 'Diamonds 3','Diamonds 4', 'Diamonds 5', 'Diamonds 6', 'Diamonds 7', 'Diamonds 8', 'Diamonds 9', 'Diamonds 10','Jack of Diamonds', 'Queen of Diamonds', 'King of Diamonds', 'Ace of Clubs', 'Clubs 1','Clubs 2','Clubs 3', 'Clubs 4', 'Clubs 5', 'Clubs 6','Clubs 7', 'Clubs 8', 'Clubs 9', 'Clubs 10', 'Jack of Clubs','Queen of Clubs','King of Clubs', 'Ace of Hearts','Hearts 1', 'Hearts 2','Hearts 3', 'Hearts 4','Hearts 5','Hearts 6','Hearts 7', 'Hearts 8', 'Hearts 9','Hearts 10', 'Jack of Hearts', 'Queen of Hearts', 'King of Hearts'])
while True:
  order=0
  cards=shuffle(cards)
  while order !=53:
    if order==0:
      print('CURRENT CARD: '+cards[order])
      print('LAST CARD: -')
#OUTPUT
#TypeError: 'NoneType' object is not subscriptable

【问题讨论】:

  • 旁注:你永远不会在循环中增加order,所以它会永远循环。
  • 约翰尼,我把它留在了代码之外

标签: python arrays


【解决方案1】:
cards=shuffle(cards)

卡片的价值是None,因为洗牌应该就位(在同一个列表中)。尝试使用以下代码获取价值时,出现错误,因为它是 None

print('CURRENT CARD: '+cards[order])

工作代码下进行简单的迭代,根据需要更改逻辑:

import random

cards = ['Ace of Spades','Spades 1','Spades 2','Spades 3','Spades 4','Spades 5','Spades 6','Spades 7','Spades 8', 'Spades 9','Spades 10', 'Jack of Spades','Queen of Spades','King of Spades','Ace of Diamonds','Diamonds 1','Diamonds 2', 'Diamonds 3','Diamonds 4', 'Diamonds 5', 'Diamonds 6', 'Diamonds 7', 'Diamonds 8', 'Diamonds 9', 'Diamonds 10','Jack of Diamonds', 'Queen of Diamonds', 'King of Diamonds', 'Ace of Clubs', 'Clubs 1','Clubs 2','Clubs 3', 'Clubs 4', 'Clubs 5', 'Clubs 6','Clubs 7', 'Clubs 8', 'Clubs 9', 'Clubs 10', 'Jack of Clubs','Queen of Clubs','King of Clubs', 'Ace of Hearts','Hearts 1', 'Hearts 2','Hearts 3', 'Hearts 4','Hearts 5','Hearts 6','Hearts 7', 'Hearts 8', 'Hearts 9','Hearts 10', 'Jack of Hearts', 'Queen of Hearts', 'King of Hearts']
order = 0;
while True:
    random.shuffle(cards)
    print("current card:", cards[order])
    print("last card:", cards[(len(cards)-1)])
    order+1

输出:

...
current card: Diamonds 2
last card: King of Clubs
current card: Jack of Spades
last card: Spades 9
current card: Clubs 6
last card: Spades 10
current card: Diamonds 4
last card: Clubs 9
current card: Diamonds 6
last card: Spades 1
current card: Jack of Hearts
last card: Diamonds 3
current card: Spades 4
last card: Spades 1
current card: Jack of Clubs
last card: Clubs 4
current card: Spades 10
last card: Diamonds 8
current card: Spades 10
last card: Hearts 3
current card: Jack of Diamonds
last card: Diamonds 5
current card: Spades 1
...

【讨论】:

    【解决方案2】:

    根据the documentation for shuffle()

    就地打乱序列 x。

    所以我们应该假设返回值是None 并且cards 已经被洗牌了。这意味着你需要改变

      cards=shuffle(cards)
    

      shuffle(cards)
    

    【讨论】:

      猜你喜欢
      • 2018-12-21
      • 2022-10-21
      • 1970-01-01
      • 2023-03-21
      • 2023-04-09
      • 2019-04-09
      • 2017-05-05
      • 1970-01-01
      • 2016-05-30
      相关资源
      最近更新 更多