为了账号安全,请及时绑定邮箱和手机立即绑定

Python 编码,嵌套循环

Python 编码,嵌套循环

catspeake 2021-08-14 17:46:14
假设有两个变量 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)
查看完整描述

3 回答

?
12345678_0001

TA贡献1802条经验 获得超5个赞

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


给定 k < m,你想计算多少个整数 l 使得 k < l^2 < m。最小可能的整数是 floor( sqrt(k) +1 ),最大可能的整数是 ceil(sqrt(m)-1)。这些整数的数量是:


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


查看完整回答
反对 回复 2021-08-14
?
温温酱

TA贡献1752条经验 获得超4个赞

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


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)


查看完整回答
反对 回复 2021-08-14
?
白衣染霜花

TA贡献1796条经验 获得超10个赞

您的代码混淆了第二个 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)有一个简单的方法来加速上述算法的事实- 但算法会变得更长……


查看完整回答
反对 回复 2021-08-14
  • 3 回答
  • 0 关注
  • 198 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号