#python #list
#python #Список
Вопрос:
Я пытаюсь создать небольшую программу, которая будет путать буквы алфавита (проще говоря)
Я пытался использовать такие вещи, как list.pop()
или list.remove()
, но они ничего не сделали
import random
def rand_let():
i = 26
alphabet = str('')
for a in range(1, 26):
key = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z']
print(len(key))
print(key)
letter = random.randint(1, i)
print(key[letter])
letters = key[letter]
alphabet = str(letters)
key.remove(letter)
i -= 1
rand_let()
Я хочу, чтобы он перепутал алфавит,
это так, но то, как он это делает, заставит буквы повторяться (я не хочу, чтобы это повторялось)
Комментарии:
1. Перетасуйте
key
массив, а затем выполнитеalphabet = "".join(key)
2. Я не думаю, что вы должны получать какие-либо повторы. Каждый раз, когда вы добавляете букву
alphabet
, вы удаляете ее изkey
, чтобы вы не могли снова выбрать эту букву.3. Так и должно быть
random.randint(0, len(key)-1)
. В противном случае вы никогда не выберетеA
и можете получить доступ за пределы списка.4. В библиотеке python уже есть функция для этого (random.shuffle ), но чтобы удалить элемент из списка по индексу, используйте встроенный del (клавиша del[буква])
Ответ №1:
shuffle
Функция from random
сэкономит вам много строк и сделает то, что вы ищете:
import random
alphabet = ['A', 'B', 'C']
random.shuffle(alphabet)
print(alphabet)
#Ex: ['C', 'A', 'B']
Ответ №2:
Причина, по которой вы получаете дубликаты, заключается в том, что, хотя у вас есть код для удаления буквы из списка ключей, строка, которая объявляет список ключей, также находится в цикле. Попробуйте переместить строку
key = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z']
над циклом for. Или, как предложено в других ответах, используйте библиотеку, чтобы сделать это за вас.
Ответ №3:
import random
import string
alphabet = [letter for letter in string.ascii_uppercase]
random.shuffle(alphabet)
print(alphabet)
Ответ №4:
Это просто перетасует список, а затем напечатает элементы списка один за другим для каждой итерации цикла for .
import random
key = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z']
random.shuffle(key)
def choice(x):
for letter in key:
print()
choice(key)