2017-08-27 30 views
0
import math 
#entrada 

x=int(input("Put a number here:")) 

#processo 

num1=int(math.sqrt(x)) 
num2=round(num1,0) 
num3=num2**2 
remaining=x-num3 

#saída 

print("The remaining is:",remaining) 

我做了这个代码来获得一个完美的正方形的剩余,对于任何“INT”号,现在我想改善这种代码所以它使用最后一个答案(存储在“剩余”中)保持为“0”(并在此之后停止计算)。计数多少次我用一个公式,直到它达到Python中的特定结果

然后,它完成计算后,我想指望有多少次我用的公式,直到它达到“0”

我知道这是很难理解把生病尝试用一个例子:

对于数字87,其余的将在这个代码中是6,因为87-(9 2)= 6,我想用这个结果(6)并且做出相同的方程,然后结果将是(2),因为6- 2 2)= 2,然后再次执行(1),然后停止,一旦它返回(0)。在这个例子中,我要计算方程用来达到(0)的次数,在这个例子中,它将是4(87 6)(6 2)(2 1)(1 0)。 (4)

我知道这是很多要求帮助我(这是一个很大的要求),但我只是盯着编程现在(10)几天前),我无法在互联网上的其他地方找到我想要的东西。谢谢您的帮助。另外,如果有什么方法可以让我的原始代码更好地告诉我。

+0

而是一轮,你可能想使用np.floor总是向下取整。将你的代码放在一个函数中并递归使用。 – Joe

+0

谢谢@Joe是的,你说得对,我已经把它改成了math.floor(num1),谢谢。 – Mateus

回答

1

我想你需要的东西是这样的:

def count_squares(x): 
    count = 0 
    remaining = 1 
    while remaining: 
     min_square = (int(x**0.5) // 1) **2 
     remaining = x - min_square 
     count +=1 
     print('X = {}, remaining = {}, count = {}'.format(x, remaining, count)) 
     x = remaining 
    return count 

print(count_squares(87)) 

解释:

  • **运营商 - 乘方。
  • //运营商 - 地板部门。在这种情况下,它类似于用于计算num2的“int”和“round”bound,因为“// 1”将丢弃点后的所有数字。顺便说一句int()函数在这种情况下根本就不是必需的。
  • 我们将从退出,而循环一旦剩余值将等于零,因为零整数值被解释为false。
  • 格式是用于格式化的字符串方法(令人惊讶)。所有{}都将填充传递给“格式”方法的参数。还有其他方法可以在python中执行格式化(%运算符和格式化字符串)。

输出是:

X = 87, remaining = 6, Count = 1 
X = 6, remaining = 2, Count = 2 
X = 2, remaining = 1, Count = 3 
X = 1, remaining = 0, Count = 4 
4 
+0

是啊!而已!我所做的所有增加的操作是在此之前放入x = int(input(“type a number:”)),并将87号码更改为x,它的工作非常感谢您。 – Mateus

相关问题