我有一个计算机程序,可以从一副牌中抽出一手麻将牌:
# imports random
import itertools, random
# make a deck of tiles
deck = list(itertools.product(range(1, 5), range(1,10), range(0,3)))
deckWinds=(list(itertools.product(range(1, 5), range(10,14), range(3,4))))
deckDragons=(list(itertools.product(range(1, 5), range(14,17), range(4,5))))
deck=deck+deckWinds+deckDragons
# shuffles the deck
random.shuffle(deck)
#have a dictionary of suit names and number names
numbers={10: "E", 11: "S", 12: "W", 13: "N", 14: "White", 15: "Green", 16: "Red"}
suits={0: "Wan", 1: "So", 2: "Pin", 3: "Wind", 4: "Dragon"}
#which card is to be drawn
cardNumber=1
# deal myHand
myHand=[]
for i in range(14):
drawn=deck[cardNumber]
cardNumber=cardNumber+1
myHand.append(drawn)
myHand.sort(key=lambda t: (t[2], t[1]))
print(myHand)
visibleHand=[]
# make readable UI version
for i in range(len(myHand)):
tile, number, suit = myHand[i] # unpack the tuple to have cleaner code
visibleHand.append(f"{numbers.get(number, number)} {suits.get(suit, suit)}")
print(visibleHand)
在 Online Python 上它工作正常,但在 Trinket 上它给了我一系列错误消息,从
SyntaxError: bad input on line 33 in main.py
开始,当我对该行进行注释以查看是否存在任何其他问题时,它显示为 AttributeError: '<invalid type>' object has no attribute 'product' on line 5 in main.py
。两者之间是否有任何差异可能导致这种情况?
我硬着头皮在 Trinket.io 上注册了。他们作为 Python 解释器运行的内容与标准 Python 相差甚远,因为运行
import itertools
print(itertools)
print(dir(itertools))
打印出来
<unknown>
['__doc__', '__name__', '__package__', 'permutations']
IOW,
itertools
是一个<unknown>
对象,并且实际上只包含permutations
(而不是我们在常规Python世界中期望的itertools
的其余部分)。
import sys
print(sys.copyright)
打印出来
Copyright 2009-2010 Scott Graham.
All Rights Reserved.
这是他们正在运行 Skulpt 的提示,但删除了
sys.version
和 sys.version_info
值,因此您无法更清楚地判断。
所以 – 回答“两者之间是否存在可能导致此问题的差异?”:是的,显然。还有其他我们不知道的差异吗?很有可能。