【问题标题】:What wrong with this while loop? - Python这个while循环有什么问题? - Python
【发布时间】:2015-09-24 10:44:06
【问题描述】:

我想要求用户输入一个数字 n,然后打印所有小于 n 的正方形。例如,如果 n = 100,我希望它打印 0、1、4、9、16、25、36、49、64、81。

我做了以下事情:

n = float(input("Please enter a positive number: "))

square = 0.0

while square < n:
    square = square + 1
    print(square * square)

但是如果我执行它并输入 n = 100,这将打印所有直到 1000 的方格。我在这里做错了什么?

【问题讨论】:

    标签: python while-loop


    【解决方案1】:

    您正在从 0 循环到 n,然后打印该数字的平方。 100 * 100 是 10000。

    重命名您的square 变量;它不能准确反映您的计数,它是 root,而不是平方值。实际上,它只是直升计数器,每步递增 1。然后测试计数器的正方形是否小于n

    root = 0.0
    while root * root < n:
        root = root + 1
        print(root * root)
    

    如果您必须存储平方,请实际存储平方,而不是根:

    root = square = 0.0
    while square < n:
        root = root + 1
        square = root * root
        print(square)
    

    接下来,如果您希望 81 是最后打印的数字,请将增量 移到print() 之后:

    root = 0.0
    while root * root < n:
        print(root * root)
        root = root + 1
    

    这确保您打印刚刚测试的数字的平方,而不是 下一个根。

    【讨论】:

    • 我明白了,谢谢。我尝试使用您实现的第一个代码,但这也会打印 100,而不是在数字 81 处退出(如果 n = 100)。这是为什么呢?
    • 因为它一计算出新根就打印出根,如果你想让它不打印100,从1.0开始,先打印再计算新根。
    • @Kamil:打印之后增加根。您在测试后立即增加了根,9 * 9 小于 100,然后您添加 1 并打印 10 * 10
    • 我认为这里应该有一个 if 语句,它超出预期结果的一个数字
    • @VigneshKalai:不,只需将增量移动到 打印之后。
    【解决方案2】:

    如果你正在寻找一个简单的代码,你可以使用这个----->>

    n = int(input())
    for i in range(0,n):
       print(i*i)
    

    我觉得很简单.....

    【讨论】:

    • 打印所有平方根小于n的平方。 OP 想要打印所有小于n 的正方形。
    • 稍作修改就可以了。 root = int ( math.sqrt( int( input("input an integer and hit enter\n") ) ) ) _ for i in range(root): _ print(i*i) 但你所拥有的是不正确的。
    猜你喜欢
    • 1970-01-01
    • 2011-02-06
    • 2013-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多