Я пишу функцию, чтобы взять новую карту из колоды карт, учитывая, что из колоды уже есть карты."ValueError: list.remove (x): x not in list", из-за случайных чисел?
def trekken(getrokken = []):
import itertools
import random
getrokken = list(getrokken)
kind = 'HCDS'
value = '123456789XJQKA'
deck = ["".join(card) for card in itertools.product(value,kind)]
for i in range(0, len(getrokken)-1): deck.remove(getrokken[i])
return(deck[(random.randint(1, len(deck)))])
Когда я использую это для некоторых примеров несколько раз я иногда получаю сообщение об ошибке:
line 16, in trekken
print(deck[(random.randint(1, len(deck)))])
IndexError: list index out of range
Например, при следующем входе:
trekken(['6H', '3C', '3D', '8C', 'AD', '9D', '7D', 'QC'])
Может быть, не первый раз , но после нескольких попыток (максимум 20) я всегда получаю это сообщение об ошибке.
random.randint (low, high) также даст высокий уровень, поэтому len (deck) может не быть хорошим кандидатом на высокий уровень, лучше выбрать значение меньше на единицу, поэтому попробуйте вместо этого «return (deck [random.randint (0 , len (колода) -1)]). Примечание. Индекс списка в Python начинается с '0' not '1', как на других языках, таких как' R'. – Dilettant
Почему бы просто не использовать 'deck = [" ".join (card) для карты в itertools.product (value, kind), если '.join (card) не в getrokken]'? Обратите внимание, что ваш 'range()' исключает из рассмотрения самую последнюю карту. –
FYI http://stackoverflow.com/q/1132941/3001761 – jonrsharpe