如何在Python中仅处理int?
我的代码有问题。这个任务是搜索3个整数来解这个方程6*a+9*b+20*c=x,其中x是一个输入。问题是我的代码只适用于浮点数,我无法强制它只在a、b、c是整数时给我一个anwser 以下是Python中的代码:如何在Python中仅处理int?,python,integer,equation,Python,Integer,Equation,我的代码有问题。这个任务是搜索3个整数来解这个方程6*a+9*b+20*c=x,其中x是一个输入。问题是我的代码只适用于浮点数,我无法强制它只在a、b、c是整数时给我一个anwser 以下是Python中的代码: def mc_nuggets(numWings): for Na in range(0, numWings + 1): for Nb in range(0, numWings - Na + 1): for Nc in range(0, n
def mc_nuggets(numWings):
for Na in range(0, numWings + 1):
for Nb in range(0, numWings - Na + 1):
for Nc in range(0, numWings - Na - Nb + 1):
num_a = (numWings - 9*Nb - 20*Nc)/6
num_b = (numWings - 6*Na - 20*Nc)/9
num_c = (numWings - 9*Nb - 6*Nc)/20
if (6*num_a + 9*num_b + 20*num_c == numWings and type(num_a) is int == True and type(num_b) is int == True and type(num_c) is int == True):
return [num_a, num_b, num_c]
return [None, None, None]
您对如何使其工作有什么想法吗?您使用的是python 2还是python 3?在Python2上,您的代码将截断整数,因此它是不正确的 在Python3上,不是因为值是
3.0
,所以类型是integer,而是float。要检查它是否为整数值,请使用is_integer
方法,请参阅
这里有一个方法,说明如何在不使用float的情况下进行处理:您应该直接迭代a和b。a的较大值为
数值/6
(当b和c为0时)。然后可以迭代b直到(numwings-6*a)/9
。一旦你到达那里,你就知道20*c=numwings-6*a-9*b
所以你不需要第三个循环,你可以很容易地检查是否有一个整数,比如前面的等式是正确的(例如用模来检查)。我的问题解决方案:
def mc_nuggets(numWings):
for Na in range(0, numWings + 1):
for Nb in range(0, numWings - Na + 1):
for Nc in range(0, numWings - Na - Nb + 1):
num_a = (numWings - 9*Nb - 20*Nc)
num_b = (numWings - 6*Na - 20*Nc)
num_c = (numWings - 9*Nb - 6*Na)
if (num_a % 6 == 0 and num_b % 9 == 0 and num_c % 20 == 0):
if (num_a >= 0 and num_b >= 0 and num_c >= 0):
return [num_a/6, num_b/9, num_c/20]
return [None, None, None]
缩进是不正确的,你是作为MIT 6.00x的一部分来做的吗?等式是正确的6*a+9*b+20*b还是应该是6*a+9*b+20*c@moonit那么,请记住2012年秋季版本中的这一点:“从6.00x课程工作人员那里,请不要参与此类作弊。首先,这违反了荣誉守则。其次,你们中少数人的行为给所有edX员工和学生带来了不好的印象。关于堆栈溢出,请不要寻求家庭作业帮助。使用我们的论坛,当我们的论坛关闭时,遵循荣誉代码,做你自己的工作。“我不是麻省理工学院的学生,只是为自己做这件事。也可以不使用//运算符保留在整型字段中。@greatvovan是的,但如果使用
/
运算符,您会遇到与python 2相同的问题,您的值会被截断。在这种情况下,它将只生成具有相同值的多个解决方案。我是关于迭代边界的,它们无论如何都应该是整数。@greatvovan是的,你说得对,我只是给出了如何进行练习的提示。