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 =makes 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)


catspeake
浏览 200回答 3
3回答

12345678_0001

您可能不想为此循环。如果 k 和 m 相距很远,则需要很长时间。给定 k < m,你想计算多少个整数 l 使得 k < l^2 < m。最小可能的整数是 floor( sqrt(k) +1 ),最大可能的整数是 ceil(sqrt(m)-1)。这些整数的数量是:import mathdef sq_between(k,m):&nbsp; &nbsp; return math.ceil(m**0.5-1) - math.floor(k**0.5+1) +1这允许sq_between(16,100)产生:5

温温酱

这是您的功能的另一个版本,似乎可以满足您的要求。k = 16m = 100perfect_squares = []for i in range(m):&nbsp; &nbsp; if i**2 < k:&nbsp; &nbsp; &nbsp; &nbsp; continue&nbsp; &nbsp; if i**2 > m:&nbsp; &nbsp; &nbsp; &nbsp; break&nbsp; &nbsp; perfect_squares.append(i**2)print(perfect_squares)

白衣染霜花

您的代码混淆了第二个 while 循环中的所有内容。如果您进一步解释一下您在那里尝试做什么,我可能能够解释为什么您的想法不起作用。我会按如下方式更改您的代码以使其正常工作:k = 10m = 40i = 0q = 0while i ** 2 < m:&nbsp; &nbsp; if i ** 2 > k:&nbsp; &nbsp; &nbsp; &nbsp; print(i)&nbsp; &nbsp; &nbsp; &nbsp; q += 1&nbsp; &nbsp; i += 1print (q)通过利用每个平方数都可以通过square = sum from i = 1 to n (2 * i + 1)有一个简单的方法来加速上述算法的事实- 但算法会变得更长……
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python