3 回答

TA貢獻(xiàn)1802條經(jīng)驗(yàn) 獲得超5個(gè)贊
您可能不想為此循環(huán)。如果 k 和 m 相距很遠(yuǎn),則需要很長(zhǎng)時(shí)間。
給定 k < m,你想計(jì)算多少個(gè)整數(shù) l 使得 k < l^2 < m。最小可能的整數(shù)是 floor( sqrt(k) +1 ),最大可能的整數(shù)是 ceil(sqrt(m)-1)。這些整數(shù)的數(shù)量是:
import math
def sq_between(k,m):
return math.ceil(m**0.5-1) - math.floor(k**0.5+1) +1
這允許
sq_between(16,100)
產(chǎn)生:
5

TA貢獻(xiàn)1752條經(jīng)驗(yàn) 獲得超4個(gè)贊
這是您的功能的另一個(gè)版本,似乎可以滿足您的要求。
k = 16
m = 100
perfect_squares = []
for i in range(m):
if i**2 < k:
continue
if i**2 > m:
break
perfect_squares.append(i**2)
print(perfect_squares)

TA貢獻(xiàn)1796條經(jīng)驗(yàn) 獲得超10個(gè)贊
您的代碼混淆了第二個(gè) while 循環(huán)中的所有內(nèi)容。如果您進(jìn)一步解釋一下您在那里嘗試做什么,我可能能夠解釋為什么您的想法不起作用。
我會(huì)按如下方式更改您的代碼以使其正常工作:
k = 10
m = 40
i = 0
q = 0
while i ** 2 < m:
if i ** 2 > k:
print(i)
q += 1
i += 1
print (q)
通過利用每個(gè)平方數(shù)都可以通過square = sum from i = 1 to n (2 * i + 1)有一個(gè)簡(jiǎn)單的方法來加速上述算法的事實(shí)- 但算法會(huì)變得更長(zhǎng)……
添加回答
舉報(bào)