首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Python编码,嵌套循环

Python编码,嵌套循环
EN

Stack Overflow用户
提问于 2018-11-11 17:49:38
回答 3查看 694关注 0票数 0

假设有两个变量,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 =make 5),并根据with i和j编写代码,我的代码将如下所示,但出现了一些错误。我想要得到结果,最后是5。我该怎么纠正它呢?

代码语言:javascript
运行
复制
 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)
EN

回答 3

Stack Overflow用户

发布于 2018-11-11 18:22:36

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

给定k< m,您需要计算有多少个整数l使得k< l^2 < m。这样的整数可能的最小值是floor( sqrt(k) +1 ),而可能的最大值是ceil(sqrt(m)-1)。这样的整数的数量是:

代码语言:javascript
运行
复制
import math

def sq_between(k,m):
    return math.ceil(m**0.5-1) - math.floor(k**0.5+1) +1

这允许

代码语言:javascript
运行
复制
sq_between(16,100)

让步:

代码语言:javascript
运行
复制
5
票数 1
EN

Stack Overflow用户

发布于 2018-11-11 18:18:48

您的代码将第二个while循环中的所有内容都搞混了。如果你进一步解释一下你试图在那里做什么,我可能就能解释为什么你的想法行不通。

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

代码语言:javascript
运行
复制
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)表示的事实,有一个简单的方法可以加速上述算法-但算法将变得更长…

票数 0
EN

Stack Overflow用户

发布于 2018-11-11 18:26:49

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

代码语言:javascript
运行
复制
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)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53247520

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档