【问题标题】:Amicable number using fuction友好数使用功能
【发布时间】:2020-07-19 09:48:15
【问题描述】:

我试着看看这对友好的数字是多少(低于 20000)。 (友好数:两个不同的数相关联,以至于每个数的真因数之和等于另一个数。(一个数的真因数是该数的一个正因数,而不是该数本身。例如,真因数6 的除数是 1、2 和 3。) 所以我写了代码..并调试了。

def amicable(num):
    a=1
    for i in range(2,num):
        if num%i==0:
            a=a+i
    return a
for j in range(2,20000):
    amicable(j)
for k in range(2,20000):
    amicable(k)

if amicable(j)==k and amicable(k)==j and j!=k:
    print(j,'Amicable',k)

它可以工作,但它不打印任何东西。 有什么问题?

【问题讨论】:

  • 你的代码缩进正确吗?发布的缩进没有任何意义。此外,对amicable 的前两次调用没有任何意义。你调用它,它返回一个值,然后你丢弃它。您不妨删除这些调用。
  • 哦,我解决了这个问题。非常感谢。

标签: python


【解决方案1】:

我认为您的代码,除了amicable 函数,应该在逻辑上和语法上进行更改。

  • 你执行了许多没有目的的函数调用:

    for j in range(2,20000):
        amicable(j)  # This call returns integer value, but result of this call is not used anywhere
    for k in range(2,20000):
        amicable(k)  # Same as above
    
  • if 语句在逻辑上是正确的,但在语法上是不正确的。你有一个错字amicalbe(k)==j -> amicable(k)==j

  • 您要检查数字对jk 的所有组合,因此您必须为每一对 数字jk 执行if 语句:

    for j in range(2,20000):
        for k in range(2,20000):
            if amicable(j)==k and amicable(k)==j and j!=k:
                print(j,'Amicable',k)  # prints for ex. 220 Amicable 284
    

    您之前所做的只是对jk 的“最后分配”值执行 if 语句,因为在执行 for-loop 迭代器变量后具有其“最后分配”值:

    for value in range(2, 20000):
        pass
    print(value)  # prints "lastly assigned" value: 19999
    

【讨论】:

    猜你喜欢
    • 2012-05-22
    • 1970-01-01
    • 1970-01-01
    • 2012-02-09
    • 2011-03-27
    • 2021-10-25
    • 2016-02-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多