Python编码,嵌套循环

时间:2018-11-11 09:49:38

标签: python

假定有两个变量k和m,每个变量已经与一个正整数相关联,并且进一步假定k的值小于m的值。编写计算k和m之间的完美平方数所需的代码。 (一个完美的平方是一个整数,例如9、16、25、36,它等于另一个整数的平方(在这种情况下分别为3 * 3、4 * 4、5 * 5、6 * 6)。)您使用变量q进行计算。例如,如果k和m的值分别为10和40,则应将3分配给q,因为在10和40之间存在以下完美的平方:16、25和36。

**如果我想计算16到100之间的数字(5,6,7,8,9 = 5)并用i和j编写代码,我的代码如下,错误。我想最后得到结果5。我该如何纠正?

 k=16
 m=100
 i=0
 j=0
 q1=0
 q2=0
 while j**2 <m:
    q2=q2+1
    while i**2 <k:
        q1=q1+1
        i=i+1
    j=j+1
    print(q2-q1)

3 个答案:

答案 0 :(得分:1)

您可能不想为此循环。如果k和m相距很远,将需要很长时间。

给定k

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)

收益:

5

答案 1 :(得分:0)

您的代码在第二个while循环中混合了所有内容。如果您进一步解释您要在此做些什么,我也许可以解释您的想法为何行不通。

我将按以下方式更改您的代码,以使其正常工作:

k = 10
m = 40

i = 0
q = 0
while i ** 2 < m:
    if i ** 2 > k:
        print(i)
        q += 1
    i += 1

print (q)

利用每个平方数都可以通过square = sum from i = 1 to n (2 * i + 1)表示的事实,有一种简便的方法可以加快上述算法的速度-但是该算法将变得比...更长。

答案 2 :(得分:0)

这是函数的另一个版本,似乎可以满足您的要求。

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)