当用户输入数字时,我会尝试确定数字是否充足。但我很失落为什么它不起作用。因为刚刚开始,我不太擅长编码。任何帮助,将不胜感激。这就是我到目前为止所做的:
def is_abundant():
n = raw_input("Enter a number: ")
max_divisor = int(n / 2) + 1
sum = 0
for x in range(1, max_divisor):
if n % x == 0:
sum += x
print ("your number isn't Abundant")
is_abundant()
当我输入它时,它并没有给我任何东西。请帮忙!
答案 0 :(得分:1)
只是查看了大量数字的定义:
在数论中,数量充足或数量过多是其适当除数之和大于数本身的数。整数12是第一个丰数。其适当的除数分别为1,2,3,4和6,共16个。维基百科
想出了这个:
def isAbundant(n):
factors = filter(lambda j: n % j == 0, range(1, n/2 + 1));
return sum(factors) > n;
或者同样,如果您喜欢单行,请:
isAbdn = lambda n: sum(filter(lambda j: n % j == 0, range(1, n/2 +1))) > n;
现在,如果您坚持使用raw_input
:
def isInputAbundant():
n = int(raw_input("Enter a number: "));
if isAbundant(n): print "YEAH! It's abundant.";
else: print "Sorry! It's not abundant.";
希望这会有所帮助。
答案 1 :(得分:0)
有几件事。首先,您可能希望通过替换:
尽快将输入从字符串转换为整数n = raw_input("Enter a number: ")
使用:
import sys
:
try:
n = int(raw_input("Enter a number: "))
except ValueError:
print "Invalid number"
sys.exit(1)
其次,在 之后,你不能说出一个数字很丰富,你总结了它的所有积分因子。因此,您的代码需要先对它们求和,然后检查:
for x in range(1, max_divisor):
if n % x == 0:
sum += x
if sum > n:
print ("Your number is abundant")
else:
print ("Your number isn't abundant")
所以,toto:
import sys
def is_abundant():
try:
n = int(raw_input("Enter a number: "))
except ValueError:
print "Invalid number"
sys.exit(1)
max_divisor = int(n / 2) + 1
sum = 0
for x in range(1, max_divisor):
if n % x == 0:
sum += x
if sum > n:
print ("Your number is abundant")
else:
print ("Your number isn't abundant")
is_abundant()
要记住的另一件事虽然这更像是一种风格。许多人会认为函数is_abundant()
是一个取整数并返回一个布尔值,而不是一个也负责输入结果的数量和输出。
您可能希望将来记住这一点,以便"正确"结构/命名你的代码以便更有意义,例如:
import sys
def is_abundant(num):
max_divisor = int(num / 2) + 1
sum = 0
for x in range(1, max_divisor):
if num % x == 0:
sum += x
return sum > num
try:
n = int(raw_input("Enter a number: "))
except ValueError:
print "Invalid number"
sys.exit(1)
if is_abundant(n):
print ("Your number is abundant")
else:
print ("Your number isn't abundant")
答案 2 :(得分:0)
" N"变量是字符串,您应该将其转换为第3行和第6行中的整数:::> INT(n)的 祝你好运