Python 中的素数和完美方格检查器
Prime number and Perfect Square Checker in Python
我正在尝试使用 Python 编写我自己的素数和完美平方检查器,
如果这是一个素数,函数应该打印 'Foo',如果这是一个完美的正方形,打印 'Bar',如果两者都不是,则打印 'FooBar'
这是我的代码:
def FooBar():
prime = True
perfSqr = False
for target in range(100,100001):
for num in range(1,target+1):
if target % num == 0 and num != target:
prime = False
if target // num == num and target % num == 0:
perfSqr = True
if prime is True:
print 'Foo'
elif perfSqr is True:
print 'Bar'
else:
print 'FooBar'
if __name__ == '__main__':
FooBar()
不知怎么的,我完全搞不懂运行,谁能给我一些提示?
几件事。首先是你运行num
从1
到target + 1
。 num % 1
始终为 0,因此您永远不会打印任何素数。
接下来,您不会在迭代中重置 prime
和 perfSqr
标志。此外,您需要将打印语句移到外循环中,以便它们打印每次迭代。
这按预期工作:
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) 你的缩进是关闭的——你似乎想要 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()
我正在尝试使用 Python 编写我自己的素数和完美平方检查器, 如果这是一个素数,函数应该打印 'Foo',如果这是一个完美的正方形,打印 'Bar',如果两者都不是,则打印 'FooBar' 这是我的代码:
def FooBar():
prime = True
perfSqr = False
for target in range(100,100001):
for num in range(1,target+1):
if target % num == 0 and num != target:
prime = False
if target // num == num and target % num == 0:
perfSqr = True
if prime is True:
print 'Foo'
elif perfSqr is True:
print 'Bar'
else:
print 'FooBar'
if __name__ == '__main__':
FooBar()
不知怎么的,我完全搞不懂运行,谁能给我一些提示?
几件事。首先是你运行num
从1
到target + 1
。 num % 1
始终为 0,因此您永远不会打印任何素数。
接下来,您不会在迭代中重置 prime
和 perfSqr
标志。此外,您需要将打印语句移到外循环中,以便它们打印每次迭代。
这按预期工作:
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) 你的缩进是关闭的——你似乎想要 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()