为啥这段代码会打印出无穷大的数字? [关闭]

Posted

技术标签:

【中文标题】为啥这段代码会打印出无穷大的数字? [关闭]【英文标题】:Why does this code print infinite numbers? [closed]为什么这段代码会打印出无穷大的数字? [关闭] 【发布时间】:2022-01-10 16:36:08 【问题描述】:

在这段代码中,为什么当我在 x1 = Chain ("6") 中放入一个字符串“6”而不是 6 时,它会在执行时打印一个无限数?

class Chain:
    def __init__(self, n):
        self.n = n
        self.counter = 0

    def __next__(self):
        if self.counter != self.n:
            self.counter += 1
        else:
            raise StopIteration
        return self.counter

    def __iter__(self):
        return self


x1 = Chain("6")

for i in x1:
    print(i)

【问题讨论】:

因为 int self.counter 永远不会等于字符串“6”。整数不等于字符串。 您是否将 6 作为字符串传递?应该是一个整数 【参考方案1】:

这一行x1 = Chain("6") 设置self.n = "6",这是一个字符串。在对象中,您将 counter 作为整数。整数永远不能等于字符串,因此您的 self.counter != self.n 始终返回 True 并且永远不会输入 else 块。

如果我是你,我会将你的 __init__ 修改为:

def __init__(self, n):
        self.n = int(n)
        self.counter = 0

【讨论】:

以上是关于为啥这段代码会打印出无穷大的数字? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

为啥这段代码不打印我的数组?

如果 Java 是强类型的,那么为啥这段代码会编译? [关闭]

为啥此代码会导致 Excel 无法正常关闭?

为啥此代码会给出错误 Expected ',' 分隔符? [关闭]

为啥 Instant 在彼此之后打印时显示不同的值? [关闭]

了解汇编、nasm、x86 中的 printf 函数。我不知道为啥这段代码没有打印出任何东西