我正在尝试使用Python编写自己的素数和完美的方形检查器, 如果这是一个素数,该函数应打印'Foo',如果这是一个完美的正方形,则打印'Bar',如果它不是,则打印'FooBar' 这是我的代码:
Integer
不知何故,我根本无法让它运行,有人能给我一些提示吗?
答案 0 :(得分:2)
很少有事情。首先,您从num
到1
运行target + 1
。 num % 1
始终为0,因此您永远不会打印任何素数。
接下来,您不会在迭代中重置prime
和perfSqr
标记。此外,您需要在外部循环中移动print语句,以便它们打印每次迭代。
这可以按预期工作:
def FooBar():
for target in range(100, 100001):
prime = True
perfSqr = False
for num in range(2, target + 1):
if target % num == 0 and num != target :
prime = False
if target // num == num and target % num == 0:
perfSqr = True
if prime or perfSqr:
print(num, end=', ')
if prime:
print('Foo', end=', ')
elif perfSqr:
print('Bar', end=' ')
print('\n')
答案 1 :(得分:0)
1)你的缩进是关闭的 - 好像你想要if块缩进所以它在第一个for循环中
2)你没有在第一个for循环中重置prime和perfSqr,所以一旦设置它们就永远不会重置。
3)你的内部for循环范围从1开始,当它应该从2开始,否则它似乎使所有数字都为素数。
这是你想要的吗?:
def FooBar():
for target in range(100,100001):
prime = True
perfSqr = False
for num in range(2,target+1):
if target % num == 0 and num != target:
prime = False
if target // num == num:
perfSqr = True
if prime is True:
print 'Foo'
elif perfSqr is True:
print 'Bar'
else:
print 'FooBar'
if __name__ == '__main__':
FooBar()