在Python中使用随机范围遍历列表
我对Python非常陌生,所以请原谅,如果这个问题非常基本,但我已经尝试过搜索,还没有找到实现类似的方法 我使用一个随机步骤循环遍历两个数字的范围,并打印出一些关于它们的信息。以下是我目前的代码:在Python中使用随机范围遍历列表,python,python-3.x,Python,Python 3.x,我对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 =
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
我将如何使我的循环真正随机?任何和所有的帮助都将不胜感激
谢谢 对于
for
循环,您无法做到这一点,因为范围
采取了初始步骤(由于C/C++for
循环遗留,可能会修改循环中的步骤或当前索引,因此经常会产生混淆)
我会选择经典的,而循环:
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
我不确定极限检查,所以当x<450000
时,我没有做,相反,我使用了一个无限循环,这样我可以在之后添加和检查(否则,我觉得我无法“模拟”循环的。这是因为您在计算之前定义了步长,并且它只计算一次。每次执行循环时,您的代码都会给您一个固定的步长值274
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
在这种情况下,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
start=440000#这将是起始公里数
num=1#计数器
在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
来自随机导入randint
def randstep(开始、结束、最小步数、最大步数):
电流=启动
屈服电流,0
当前<结束时:
阶跃=randint(阶跃最小值,阶跃最大值)
电流+=阶跃
如果电流<结束:
产生电流,阶跃
对于枚举(randstep(44000450000200400))中的num,(x,step):
打印(“{}:{}km,增加{}km”。格式(num,x,step))
$python3 t.py
0:44000公里,增加0公里
1:44338公里,增加338公里
2:44587公里,增加249公里
3:44954km,增加367km
$python3 t.py
0:44000公里,增加0公里
1:44374km,增加374km
2:44598公里,增加224公里
3:44815公里,增加217公里
因此,对于实际循环,您需要使用while
,但您可以将循环提取到生成器randstep
,然后可以在for
循环中使用。您还需要一个计数器num
,并且已经有一个生成器枚举
,因此,如果我正确地理解,您只需放置步骤变量(定义随机步骤的地方)在循环内部,就在“for”语句之后。@BossaNova不,这是不够的,因为在for循环中使用时,步骤
不再定义。while
方法在这里是合适的,请参阅下面Jean François Fabre的答案。感谢您的帮助,我将进一步了解while循环。极限检查有效很好,如果你提到x谢谢你的回答,我真的很感谢你的代码注释!很乐意帮助:)如果你喜欢答案,请随意投票。我可以使用一个小的代表增量,我已经尝试过了,但显然我的帐户太新了,无法提供升级投票:(哈哈……不用担心。我理解这是怎么回事。你可以在以后有更多代表时再来:)我以前从未遇到过这种方法-你给了我更多的阅读时间。非常感谢:)