ForLoop中不需要的随机迭代器

2024-10-02 22:28:33 发布

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

我试图创建一个函数,在其他两个值(startFrom和stopAt)之间生成一组值(numbersToChoose),但由于某种原因,迭代器(?)在第二个for循环(第7行)中,在本例中,a似乎是随机生成的,尽管我看不出任何原因。你知道吗

def chooseRandomNumbers(numbersToChoose, startFrom, stopAt):

 numbers = [(randrange(startFrom, stopAt))]  # initialize empty list of numbers

 for n in range(numbersToChoose-1):  # choose random number from 1 to 49 a total of 7 times
    x = randrange(startFrom, stopAt+1)
    for a in numbers:  # check for already existing elements in "numbers"
        if x == numbers[a]:  # if new random number already exists in "numbers" discard and run loop again
            n -= 1  # decreases n by 1 so a new (hopefully not already existing) number can be generated
        else:  # generated numbers does not exist in "numbers" yet
            numbers.append(x)  # appends randomly chosen number to list "numbers"

 return numbers  # returns said list "numbers"

任何关于如何处理这一问题的建议都将不胜感激。 如果可能的话,请告诉我代码中还有什么不好的地方(刚刚开始的python)。你知道吗


Tags: oftoinnumberforifrandomlist
1条回答
网友
1楼 · 发布于 2024-10-02 22:28:33

检查生成的号码是否已经在列表中的代码是错误的。 for a in numbers,在这个循环中,您使用的是numbers[a],而a是list的成员,而不是成员的索引。 使用in测试列表中是否有数字:

从随机导入范围

def chooseRandomNumbers(numbersToChoose, startFrom, stopAt):
     numbers = []
     for n in range(numbersToChoose):
        x = randrange(startFrom, stopAt+1)
        if not x in numbers:
            numbers.append(x)
        else:
            n -= 1
     return numbers

或者简单地说:

from random import sample
def chooseRandomNumbers(numbersToChoose, startFrom, stopAt):
    return sample(range(startFrom,stopAt+1),numbersToChoose)

相关问题 更多 >