Trinket与online-python.com的差异导致麻将发牌代码报错的问题咨询
Trinket与online-python.com的差异导致麻将发牌代码报错的问题咨询
看起来你的代码遇到的问题主要来自两个平台的Python版本差异,以及Trinket可能的环境限制,我来帮你拆解这两个错误:
第33行的SyntaxError语法错误
你的代码里用了Python 3.6+才支持的f-string语法(f"{numbers.get(number, number)} {suits.get(suit, suit)}"),而Trinket默认可能使用的是Python 2.x版本(或者非常旧的Python 3版本)。Python 2完全不支持f-string语法,所以会直接抛出语法错误。解决方法:把f-string改成Python 2兼容的字符串格式化方式,比如用
.format():visibleHand.append("{0} {1}".format(numbers.get(number, number), suits.get(suit, suit)))或者用旧的%格式化语法:
visibleHand.append("%s %s" % (numbers.get(number, number), suits.get(suit, suit)))itertools.product的AttributeError属性错误
当你注释掉第33行后出现这个错误,大概率还是Python版本的问题:- Python 2.6及以后的版本才加入了
itertools.product函数,如果Trinket使用的是极其老旧的Python 2.5及以前版本,这个函数就不存在。 - 另外也有可能Trinket的教学受限环境里禁用了这个函数,但这种情况比较少见。
解决方法:
- 优先尝试在Trinket里切换到Python 3环境(通常在项目设置里可以选择版本),这样就能正常使用
itertools.product和f-string了。 - 如果无法切换版本,可以手动用嵌套循环替代
itertools.product来生成牌组,比如基础牌组可以改成:
牌风和箭牌的生成也可以用同样的嵌套循环方式实现。# 替代itertools.product生成基础牌组 deck = [] for a in range(1,5): for b in range(1,10): for c in range(0,3): deck.append((a, b, c))
- Python 2.6及以后的版本才加入了
简单总结下差异:online-python.com一般默认使用较新的Python 3版本,支持所有现代语法和完整的模块功能;而Trinket为了适配教学场景,可能默认保留了Python 2环境,或者对部分模块功能有限制,这就是你的代码在两个平台表现不同的核心原因。
备注:内容来源于stack exchange,提问作者Anonymous
相关产品推荐
相关产品推荐

