运行程式码时卡住,无结果。

我在运行下面这段程式码时,系统卡住了,一直没有回传值。请问其他人是否可以运行?哪里的问题?

###每次从1-99中抽出四个数字,直到和my_ticket中的四个数字相同时即为中奖,并回传重复次数timer
from random import choice ,randint
lis1=[]
for i in range(1,11):
    lis1.append(randint(1,99))
a=[]
my_ticket=[1,10,20,21]
timer=0
seq=0
for i in range(0,4):
    a.append(choice(lis1))
while True:  
    if seq<=3:
        x=my_ticket[seq]
        if x in a:
            seq+=1

        else:
            for i in range(0,4):
                a[i]=choice(lis1)
                timer+=1
    else:
        False
print('中奖!')  
print(timer) 
Jason990420
最佳答案

您的代码中存在一些问题,

  • while循环没有break条件跳出,或因为while True不会中止。 (可能False应该是break)
  • 在逻辑上,如果lis1中没有所有四个数字[1,10,20,21]seq将总是小于4
2年前 评论
讨论数量: 7
Jason990420

您的代码中存在一些问题,

  • while循环没有break条件跳出,或因为while True不会中止。 (可能False应该是break)
  • 在逻辑上,如果lis1中没有所有四个数字[1,10,20,21]seq将总是小于4
2年前 评论

@Jason990420 所以应该是因为取值范围太大,所以系统短时间内没能挑出[1,10,20,21]这四个数字,对么?

2年前 评论
Jason990420

不是短时间, 是一开始lis1就从1~99 中取10 个数字, 而且还可能会重复, 10个数字要涵盖1, 10, 20, 21 這四个数字, 很少有机会达成, 所以后面的比对, 可以说是永远达不到的.

举例说明:
如果你从1~99中找10个数字, 比如[56, 36, 50, 23, 94, 76, 67, 4, 22, 31], 从其中任意找4个数字, 永远不可能比对到[ 1, 10, 20, 21]

2年前 评论

@Jason990420 我将 lis1 更改为 lis1=[i for i in range(1,100)], 可以么?

2年前 评论
Jason990420

可以啊, 记得 False 要改为 break ! 但是重点是, 该代码的目的对吗 ?

2年前 评论

@Jason990420 我将lis1更改并把false改为break后解决了问题,谢谢。

2年前 评论

@Jason990420 没错,是对的。

2年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!