我在这个任务上停留了一段时间。使用以下代码,我设法生成了1500个坐标,使我在0到2(x,y)之间浮动。
coordinates = [(random.random()*2.0, random.random()*2.0) for _ in range(15000)]
print(coordinates)
但是,现在我需要创建一个计数器来计算0到1之间的浮点数并将其输出给用户。香港专业教育学院试图使用If语句和while循环。我还窥探了互联网,无法找到任何有用的东西。有人知道如何解决这个问题吗?
亲切的问候。
答案 0 :(得分:3)
如果x
或/和y
小于1
,则可以在元组上使用简单的条件sum()
并总结 1 :
import random
# your code used 15k tuples, your text says 1.5k - adapt the number to your liking
coordinates = [(random.random()*2.0, random.random()*2.0) for _ in range(1500)]
one_lower_1 = sum(1 for x,y in coordinates if x < 1 or y < 1)
both_lower_1 = sum(1 for x,y in coordinates if x < 1 and y < 1)
x_lower_1 = sum(1 for x,_ in coordinates if x < 1)
y_lower_1 = sum(1 for _,y in coordinates if y < 1)
print(one_lower_1)
print(both_lower_1)
print(x_lower_1)
print(y_lower_1)
输出
1134
383
745
772
从本质上讲,这是一个生成器表达式,它仅从生成的if ....
中过滤掉与coordinates
之后的部分匹配的那些对。
我选择了sum(1 ... )
方法,因为那样就不必创建一个列表来获取其len()
了……如果只需要元素数量然后生成所有元素,则它对内存更友好元素。
使用jpp's评论的替代方法:
sum(x < 1 or y < 1 for x,y in coordinates)
这之所以有效,是因为超过10个True
的总和为10-每个True counting as 1:
print(sum(True for _ in range(10))) # 10
答案 1 :(得分:0)
这应该使您入门。这是另一种列表理解,它检查您的坐标对列表,以查看每个x和y是否在(0,1)区间内。
from random import random
print(len([(x,y) for x,y in [(2*random(),2*random()) for _ in range(1500)] if 0 < x < 1 and 0 < y < 1]))
如果您的唯一目标是对所有对进行计数,以使x,y对在间隔(0,1)之内,则while循环将通过避免创建列表来提高效率。
def rand_coordinates(num_of_pairs):
"""Counts the number of randomly generated x,y
pairs in the range of [0,2) where x and y are
contained in the interval from (0,1)"""
count = 0
while num_of_pairs:
x,y = 2*random(),2*random()
if 0 < x < 1 and 0 < y < 1:
count += 1
num_of_pairs -= 1
return count