我有这个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)
答案 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 partial
和from 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)
下面的程序是查找给定数字的平方值
最大=输入(“输入最大:”)
r = range(1,最大值)
平方=最大*最大
对于我在r中:
如果i * i <=正方形:
*.d.ts