Trinket 和 online-python.com 之间的区别

问题描述 投票:0回答:1

我有一个计算机程序,可以从一副牌中抽出一手麻将牌:

# 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
。两者之间是否有任何差异可能导致这种情况?

python interpreter
1个回答
0
投票

我硬着头皮在 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
值,因此您无法更清楚地判断。

所以 – 回答“两者之间是否存在可能导致此问题的差异?”:是的,显然。还有其他我们不知道的差异吗?很有可能。

© www.soinside.com 2019 - 2024. All rights reserved.