TypeError: '>' 在 'list' 和 'int' 的实例之间不支持

新手上路,请多包涵

我正在开发一个用于计算游戏中某些值的库。我有这段代码:

 million = [1000000, "M"]
billion = [million * 1000, "B"]
trillion = [billion * 1000, "T"]
quadrillion = [trillion * 1000, "Qd"]
quintillion = [quadrillion * 1000, "Qn"]
sx = [quintillion * 1000, "Sx"]
septillion = [sx * 1000, "Sp"]

suffixes = [million, billion, trillion, quadrillion, quintillion, sx, septillion]

def getSetupResult(orevalue, furnacemultiplier, *upgrades, **kwargs):
    for i in upgrades:
        orevalue *= i
    orevalue *= furnacemultiplier
    for suffix in suffixes:
        if orevalue > suffix[0] - 1 and orevalue < suffix[0] * 1000:
            print("$"+str(orevalue)+suffix[1])

getSetupResult(quintillion,700,5,4,10,100)

当我尝试运行它时,它会引发此错误:

 Traceback (most recent call last):
  File "C:/Users/???/Desktop/MinersHavenCalculator.py", line 19, in <module>
    getSetupResult(quintillion,700,5,4,10,100)
  File "C:/Users/???/Desktop/MinersHavenCalculator.py", line 16, in getSetupResult
    if orevalue > suffix[0] - 1 and orevalue < suffix[0] * 1000:
TypeError: '>' not supported between instances of 'list' and 'int'

是什么导致了这个错误?

原文由 Bloxy Craft 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.4k
2 个回答

您有很多问题无法区分列表和整数。

 million = [1000000, "M"]
billion = [million * 1000, "B"]

billion[0] 实际上不是 1000000 * 1000 ,它是一个长度为 1000 的列表。

这是所有问题的根源,因为现在 suffix[0] 在循环的第一次迭代后成为一个列表。您需要的最大更改如下:

 million = [1000000, "M"]
billion = [million[0] * 1000, "B"]
trillion = [billion[0] * 1000, "T"]
quadrillion = [trillion[0] * 1000, "Qd"]
quintillion = [quadrillion[0] * 1000, "Qn"]
sx = [quintillion[0] * 1000, "Sx"]
septillion = [sx[0] * 1000, "Sp"]

这确保其中每一个都是具有正确后缀和值的二元列表。这是全部:

 suffixes = [million, billion, trillion, quadrillion, quintillion, sx, septillion]

def getSetupResult(orevalue, furnacemultiplier, *upgrades, **kwargs):
    for i in upgrades:
        orevalue *= i
    orevalue *= furnacemultiplier
    for suffix in suffixes:
        if orevalue > suffix[0] - 1 and orevalue < suffix[0] * 1000:
            print("$"+str(orevalue)+suffix[1])
getSetupResult(quintillion[0],700,5,4,10,100)

输出:

 $14000000000000000000000000Sp

原文由 user3483203 发布,翻译遵循 CC BY-SA 3.0 许可协议

你的百万/十亿/…变量都是列表。发送 million[0] 以指定列表 million 的第 0 个索引中的 int 1000000,你会得到一个答案 ‘$14000000000000T’

另外,当你 \* 一个列表时,你只是复制了那个列表,你将它乘以多少次。所以你的 million * 1000 需要是 million[0] * 1000 等等。

原文由 user85779 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题