Python 对于范围内的x,仅工作5次
我正在做学校作业,遇到了一个问题。当我输入希望抽奖行的次数时,程序最多只执行五次。你知道为什么会这样吗Python 对于范围内的x,仅工作5次,python,Python,我正在做学校作业,遇到了一个问题。当我输入希望抽奖行的次数时,程序最多只执行五次。你知道为什么会这样吗 import random from time import sleep rivi = [] seen = set(rivi) voittorivi = [7, 9, 10, 25, 31, 39, 40] while True: try: rvnro = input('kuinka monta riviä pelataan?: ') rvnro1 = int(rvnro
import random
from time import sleep
rivi = []
seen = set(rivi)
voittorivi = [7, 9, 10, 25, 31, 39, 40]
while True:
try:
rvnro = input('kuinka monta riviä pelataan?: ')
rvnro1 = int(rvnro)
print('pelataan', rvnro, 'riviä')
break
except ValueError:
print('käytäthän vain numeroita.')
print(' ')
for x in range (rvnro1):
while len(rivi) < 7:
numero = random.randint(1,40)
if numero not in seen:
seen.add(numero)
rivi.append(numero)
else:
u=0
rivi.sort()
if rivi == voittorivi:
print('Voitit pääpalkinnon! Onneksi olkoon!')
print(rivi)
print(' ')
sleep(0.1)
rivi.clear()
随机导入
从时间上导入睡眠
里维埃=[]
SEED=设置(rivi)
voittorivi=[7,9,10,25,31,39,40]
尽管如此:
尝试:
rvnro=输入('kuinka monta riviäpelatan?:')
rvnro1=int(rvnro)
打印('Pelatan',rvnro',riviä')
打破
除值错误外:
打印('käytäthän vain numeroita.”)
打印(“”)
对于范围内的x(rvnro1):
而len(rivi)<7:
numero=random.randint(1,40)
如果看不到数字:
见。添加(数字)
附加(数字)
其他:
u=0
rivi.sort()
如果rivi==voittorivi:
打印('Voitit päpalkinnon!Onneksi olkoon!')
打印(rivi)
打印(“”)
睡眠(0.1)
rivi.clear()
修复程序
它还将帮助您结束算法,因为它在len(rivi)时陷入了无尽的循环中
修复程序
它还将帮助您结束算法,因为它陷入了无休止的循环中,因为len(rivi)您从未重置
seen
,所以在1到40之间的7个数字的5轮之后,您就没有更多的数字来填充另一行7。在第六轮,在5个数字之后,你涵盖了所有40个选项,剩下的2个选项没有更多的数字。因此,当len(rivi)<7:循环时,您会被困在中(因为rivi
永远不会到达7个元素)
通过在循环中使用而不是调用random.randint
,并检查号码是否已被选中,可以简化此过程:
number=列表(范围(1,41))
对于范围内的x(rvnro1):
rivi=已排序(随机。样本(数字,7))
如果rivi==voittorivi:
打印('Voitit päpalkinnon!Onneksi olkoon!')
打印(rivi)
打印(“”)
睡眠(0.1)
您从未重置所见
因此,在1到40之间的7个数字的5轮之后,您没有更多的数字来填充另一行7。在第六轮,在5个数字之后,你涵盖了所有40个选项,剩下的2个选项没有更多的数字。因此,当len(rivi)<7:
循环时,您会被困在中(因为rivi
永远不会到达7个元素)
通过在循环中使用而不是调用random.randint
,并检查号码是否已被选中,可以简化此过程:
number=列表(范围(1,41))
对于范围内的x(rvnro1):
rivi=已排序(随机。样本(数字,7))
如果rivi==voittorivi:
打印('Voitit päpalkinnon!Onneksi olkoon!')
打印(rivi)
打印(“”)
睡眠(0.1)
您是否知道范围(6)给出了[0,1,2,3,4,5]上的迭代器
?请阅读。你也可以使用它来帮助一步一步地可视化代码的执行。你永远不会重置seen
,因此在1到40之间的5轮7个数字之后,你就没有更多的数字可以感觉到另一行7了…@Tomerikoo很好地解释了这个问题!另外,还可以查看一种不使用循环和集合生成7个随机数的方法。您是否知道range(6)在[0,1,2,3,4,5]上提供了一个迭代器?
?请阅读。你也可以使用它来帮助一步一步地可视化代码的执行。你永远不会重置seen
,因此在1到40之间的5轮7个数字之后,你就没有更多的数字可以感觉到另一行7了…@Tomerikoo很好地解释了这个问题!另外,还可以看看使用list.clear()
和set.clear()
生成7个随机数而不使用循环和setIMO的方法。clear()创建新的list和set对象并在原始对象上分配它们比创建新的list和set对象更好ones@Adam.Er8将修复it@Tomerikoo行@亚当:为什么?如果需要保留别名关联,请确定。否则,只做新的就可以了(通常更便宜,至少对于列表
s,其中=[]
避免了函数调用开销)rivi=[]
非常好seen=set()
是。。。meh(我很恼火没有真正的空set
literal,独眼猴子操作,{*()}
是…meh)。@ShadowRanger你是对的,甚至没有理由在循环之外定义它们,然后在每次迭代结束时清除它们,通常你只有一次空的初始化,在loop.IMO开始时,使用list.clear()
和set.clear()
比创建新的list和set对象并将它们分配给原始对象更好ones@Adam.Er8将修复it@Tomerikoo行@亚当:为什么?如果需要保留别名关联,请确定。否则,只做新的就可以了(通常更便宜,至少对于列表
s,其中=[]
避免了函数调用开销)rivi=[]
非常好seen=set()
是。。。meh(我很恼火没有真正的空set
literal,独眼猴子操作,{*()}
是…meh)。@ShadowRanger你是对的,甚至没有理由在循环外定义它们,然后在每次迭代结束时清除,通常在循环开始时只有一次空初始化。
sleep(0.1)
rivi.clear() # reinitiating the list
seen.clear() # reinitiating the set