我是初学者,正在使用Python,我得到了这个任务:编写一个返回最大完美正方形的函数,该正方形小于或等于其参数(正整数)。 < / p>
def perfsq(n):
x = 0
xy = x * x
if n >= 0:
while xy < n:
x += 1
if xy != n:
print (("%s is not a perfect square.") % (n))
x -= 1
print (("%s is the next highest perfect square.") % (xy))
else:
return(print(("%s is a perfect square of %s.") % (n, x)))
当我运行代码来执行该功能时,它不会输出任何内容。我承认,我很挣扎,如果你能就如何解决这个问题给我一些建议,我将不胜感激。
答案 0 :(得分:1)
您的循环条件
while xy < n:
这将是真的,因为xy始终为0,如果你将n = 0调用函数,则n总是大于零,它将打印0 is a perfect square of 0.
并返回None。
for n > 0
为什么在true
的情况下始终为xy < n
,因为您已分配xy 0
并且在循环运行时从未将其修改为任何其他值,请检查条件并始终得到True
答案 1 :(得分:0)
就像Patrick Haugh所说,尝试检查while循环何时退出。在整个方法中放置print()语句以确定方法的执行方式会很有帮助。为了弄清楚循环何时退出,请查看while循环的退出条件:xy&lt; ñ。
请记住,在您更新变量之前,变量不会更新。
def perfsq(n):
x = 0
xy = x * x
print("xy: {}".format(xy))
if n >= 0:
while xy < n:
x += 1
print("xy in loop: {}".format(xy))
if xy != n:
print (("%s is not a perfect square.") % (n))
x -= 1
print (("%s is the next highest perfect square.") % (xy))
else:
return(print(("%s is a perfect square of %s.") % (n, x)))
答案 2 :(得分:-1)
我看到了你的错误,这对某人来说很容易。定义时
xy = x*x
计算机计算x*x
并将数字指定为xy
的值。因此,当您向x
添加一个时,它不会更改xy
的值。您必须告诉计算机每次重新计算xy
:
while xy < n:
x += 1
xy = x*x
答案 3 :(得分:-1)
main {background-color: blue;}
想一想。