Я использую генератор случайных чисел для выбора вопроса из списка в случайном порядке, если вопрос уже был дан, он должен пропустить и перезапустить, пока не получит номер который еще не был дан.RNG должен игнорировать числа, которые уже были предоставлены [Python]
Работает до тех пор, пока варианты не станут слишком ограниченными. Он будет рулон ~ 4 раза. Если у него все еще нет номера, который ранее не был указан, он выдаст ошибку «индекс за пределами диапазона».
Пример:
from random import randint
counter = 0 # Max value, count the amount of questions in the list
done = [] # Already been rolled, ignore these values
list = open('questions.txt').readlines()
for l in list:
counter +=1
try:
# While there are less values in <done> than <counter>, roll and add to list
while len(done) < counter:
question = randint(1,counter)
while question in done:
print('Skipped [%i]' % question) # Check if ignored
question = randint(1,counter) # Reroll
else:
# Add to list so it knows the question has already been asked
done.append(question) # Add to list with given values
else:
print('Finished!\n')
except Exception as e:
print(e) # Show error if any
Я понятия не имею, что я сделал неправильно, пожалуйста, помогите.
Спасибо :)
Вы должны использовать 'random.sample', между прочим. – TigerhawkT3
Термин, который вы ищете, это «перетасовка». Используйте 'random.shuffle', а затем просто поместите элементы. – jamesdlin
'random.randint()' включает обе конечные точки. Поэтому иногда вы получаете последнюю точку: вне диапазона. Используйте 'randrange()', или, лучше проверить выше комментарии, чтобы быть действительно pythonic. –