在Python中使用随机范围遍历列表

2024-04-26 07:47:26 发布

您现在位置:Python中文网/ 问答频道 /正文

我对Python还很陌生,所以请原谅,如果这个问题非常基本,但我已经尝试过搜索,还没有找到一种方法来实现这样的东西。你知道吗

我使用一个随机的步骤在两个数字的范围内循环,并打印出一些关于它们的信息。以下是我目前的代码:

from random import randint

#generate random number between 200 and 400
step = randint(200,400)
num = 0

for x in range(440000,450000,step):
    num = num + 1
    print("{}: {}km, increased by {}km".format(num,x,step))

我希望能够打印出step变量,并让它为循环的每个迭代(随机)更改,但是代码只给我一个值,在每个迭代中重复它自己。下面是一个示例输出:

1: 440000km, increased by 274km
2: 440274km, increased by 274km
3: 440548km, increased by 274km
4: 440822km, increased by 274km
5: 441096km, increased by 274km
6: 441370km, increased by 274km
7: 441644km, increased by 274km
8: 441918km, increased by 274km
9: 442192km, increased by 274km
10: 442466km, increased by 274km
11: 442740km, increased by 274km
12: 443014km, increased by 274km
13: 443288km, increased by 274km
14: 443562km, increased by 274km
15: 443836km, increased by 274km
16: 444110km, increased by 274km

我该如何使我的循环真正随机?任何帮助都将不胜感激。你知道吗

谢谢!你知道吗


Tags: 方法代码fromimport信息bystep步骤
3条回答

在Python中,当您想在for循环中做一些有点复杂的事情时,通常需要将复杂的部分提取到生成器中。你知道吗

from random import randint

def randstep(start, end, stepmin, stepmax):
    current = start
    yield current, 0
    while current < end:
        step = randint(stepmin, stepmax)
        current += step
        if current < end:
            yield current, step

for num, (x, step) in enumerate(randstep(44000, 45000, 200, 400)):
    print("{}: {}km, increased by {}km".format(num,x,step))

$ python3 t.py
0: 44000km, increased by 0km
1: 44338km, increased by 338km
2: 44587km, increased by 249km
3: 44954km, increased by 367km
$ python3 t.py
0: 44000km, increased by 0km
1: 44374km, increased by 374km
2: 44598km, increased by 224km
3: 44815km, increased by 217km

因此,对于实际的循环,您需要使用while,但是您可以将循环提取到生成器randstep,然后在for循环中使用。您还需要一个计数器num,并且已经有了一个生成器enumerate,因此不需要执行num = num + 1。你知道吗

这是因为您正在定义计算前的步骤,并且只计算一次。每次执行循环时,代码都会给出274的固定步长值。你知道吗

在这种情况下,For循环并不理想(尽管有人可能会提供解决方案)。 在这种情况下,可以使用while循环来获得所需的结果。你知道吗

start = 440000 # this will be the starting km
num = 1        # Counter

while start <= 450000: # End value is 450000 km
    step = randint(200,400)       # This calls a new random int for each loop
    print ("{}: {}km, increased by {}km".format(num,start,step))
    start = start + step          # add start and step to give new start km
    num = num + 1                 # increment counter
<^ >不能使用^ {}循环来实现这一点,因为{< CD2>}采用初始EEM>步骤(由于C//C++ +{}循环遗留下来的混乱,通常可能会在循环中修改步骤或当前索引)。你知道吗

我会用一个经典的while循环:

from random import randint

#generate random number between 200 and 400
num = 0

x = 440000

while True:
    num += 1
    step = randint(200,400)
    x += step
    if x >= 450000:
        break
    print("{}: {}km, increased by {}km".format(num,x,step))

结果:

1: 440380km, increased by 380km
2: 440586km, increased by 206km
3: 440975km, increased by 389km
4: 441221km, increased by 246km
5: 441545km, increased by 324km
6: 441803km, increased by 258km
7: 442080km, increased by 277km
8: 442476km, increased by 396km
9: 442822km, increased by 346km
10: 443179km, increased by 357km
11: 443536km, increased by 357km
12: 443779km, increased by 243km
13: 444170km, increased by 391km
14: 444449km, increased by 279km
15: 444791km, increased by 342km
16: 445023km, increased by 232km
...
28: 449154km, increased by 348km
29: 449431km, increased by 277km
30: 449647km, increased by 216km
31: 449890km, increased by 243km

我不确定极限检查,所以我没有做while x < 450000,相反,我使用了一个无限循环,这样我可以在之后添加&;检查(否则,我觉得我将无法“模拟”这个for循环)。你知道吗

相关问题 更多 >