2017-08-27 34 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

相關問題