循环平方

时间:2018-08-25 01:08:02

标签: python

我有这个python问题:

  

编写一个程序,询问用户一个限制,然后打印出   小于或等于   提供了限制。

     

最大:10

     

1

     

4

     

9

     

最后一个数字为9,因为下一个平方数字(16)为   大于限制(10)。

     

这是另一个示例,其中最大值是一个平方数:

     

最大:100 1

     

4

     

9

     

16

     

25

     

36

     

49

     

64

     

81

     

100

但是我不完全知道该怎么做。到目前为止,我有

maximum = int(input("Max: "))

for i in range(1, maximum):

但是真的不知道如何处理数字并求平方。

谢谢

编辑:我有

maximum = int(input("Max: "))

for i in range(1, maximum):
  if i*i <= maximum:
    print(i*i)

6 个答案:

答案 0 :(得分:3)

'''
Ask the user input a limit and
convert input string into integer value
'''
limit = int(input("Please input the limit: "))

'''
Extract the squre root of `limit`.
In this way we discard every number (i) in range [0, limit]
whose square number ( i * i ) is not in range [0, limit].
This step improves the efficiency of your program.
'''
limit = int(limit ** .5)

'''
`range(a, b)` defines a range of [a, b)
In order to exclude zero,
we assign `a = 1`;
in order to include `limit`,
we assign `b = limit + 1`;

thus we use `range(1, limit + 1)`.
'''
for i in range(1, limit + 1):
    print(i * i)

答案 1 :(得分:3)

我认为while循环可能更适合此问题。

maximum = int(input("Max: "))

i = 1
while(i*i <= maximum):
   print(i*i) 
   i+=1

答案 2 :(得分:2)

您得到了一些很好的详细答案。

但是,让我们也玩得开心,这是一种单行解决方案:

print(*(x**2 for x in range(1, 1 + int(int(input('Limit: '))**(1/2)))))

答案 3 :(得分:2)

首先,对现有代码的最简单更改是摆脱该嵌套循环。只需使用for循环和一个if

for i in range(1, maximum+1):
    if i*i > maximum:
        break
    print(i*i)

或者只是进行while循环并手动递增:

i = 1
while i*i <= maximum:
    print(i*i)
    i += 1

一件事:注意我使用了range(1, maximum+1)?范围是半开的:range(1, maximum)为我们提供了所有但不包括maximum的数字,我们需要包含maximum本身才能使所有数字为maximum平方,以防万一是1。(这是在<=版本中使用<而不是while的相同原因。


但是,让我们再开心一点。如果您拥有所有自然数:

numbers = itertools.count(1)

...您可以将其变成所有正方形:

squares = (i*i for i in numbers)

不用担心它们数量不限的事实;我们正在懒惰地计算它们,一旦通过maximum,我们将停止:

smallsquares = itertools.takewhile(lambda n: n<=maximum, squares)

...现在我们有一个很好的有限序列,可以打印出来:

print(*smallsquares)

或者,如果您希望全部显示在一行上(在这种情况下,您可能还希望使用from itertools import count, takewhile):

print(*takewhile(lambda n: n<=maximum, (i*i for i in count(1)))

但是,实际上,lambda的表达有点丑陋。也许(使用from functools import partialfrom operator import ge)的可读性如下:

print(*takewhile(partial(ge, maximum), (i*i for i in count(1)))

答案 4 :(得分:1)

我已决定发布有效的答案。谢谢大家的帮助。

maximum = int(input("Max: "))

for i in range(1, maximum + 1):
  if i*i <= maximum:
    print(i*i)

答案 5 :(得分:0)

下面的程序是查找给定数字的平方值

  1. 输入要查找的值。(给定范围)
  2. 您提供的值将运行并转到r命令。
  3. 在这种情况下,我使用了循环。
  4. 将显示输出

提供输入

最大=输入(“输入最大:”)

r = range(1,最大值)

平方=最大*最大

执行循环

对于我在r中:

如果i * i <=正方形:

*.d.ts