【问题标题】:Prime number and Perfect Square Checker in PythonPython中的素数和完美平方检查器
【发布时间】:2017-07-10 20:54:43
【问题描述】:

我正在尝试使用 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()

不知怎的,我根本无法让它运行,谁能给我一些提示?

【问题讨论】:

  • 范围从 1 开始,目标 % num 始终为 0。
  • 你到底是什么意思?你没有调用方法吗?你能得到像 hello world 这样简单的东西,而不需要你的计算和 if/elses 吗?
  • 不要在一个大的单一函数中破坏所有逻辑。拥有is_prime(x)is_perfect_square(x) 函数并将它们应用于序列。

标签: python algorithm primes perfect-square


【解决方案1】:

几件事。第一个是您将num1 运行到target + 1num % 1 始终为 0,因此您永远不会打印任何素数。

接下来,不要在迭代中重置 primeperfSqr 标志。此外,您需要将打印语句移动到外部循环中,以便它们打印每次迭代。

这按预期工作:

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')

【讨论】:

  • 谢谢,这就是我要找的答案
【解决方案2】:

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()

【讨论】:

    猜你喜欢
    • 2018-09-01
    • 2022-08-23
    • 1970-01-01
    • 2019-07-10
    • 2017-12-23
    • 1970-01-01
    • 2019-03-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多