#python #python-3.x #random #replace
#python #python-3.x #Случайный #заменить
Вопрос:
Replace_Character = input("Enter ! here: ")
Replace_Character = Replace_Character.replace("!",random.choice(Letters))
Когда я запускаю это, он заменяет ! случайной буквой из списка, но все буквы одинаковые. Как я могу сделать так, чтобы каждый! получите другую букву?
Комментарии:
1. пожалуйста, добавьте свой полный код.
2.
replace
Функция заменяет все экземпляры первого аргумента вторым аргументом. Вам придется использовать другой способ, чем просто однострочный, чтобы иметь возможность изменять каждый экземпляр на другую букву.
Ответ №1:
Здесь я использую выражение генератора и предполагаю, что вы хотите выполнить выборку случайным образом с заменой:
>>> import string
>>> import random
>>> letters = string.ascii_lowercase
>>> print(letters)
abcdefghijklmnopqrstuvwxyz
>>> test = '!A!B!!'
>>> ''.join(random.choice(letters) if c == '!' else c for c in test)
'uAqBtq'
>>> ''.join(random.choice(letters) if c == '!' else c for c in test)
'xApBfo'
Комментарии:
1. Я пробовал, но это почему-то не работает. Спасибо вам за вашу помощь, хотя.
2. Не могли бы вы объяснить, что «не работает»? Это делает именно то, что вы просили.
Ответ №2:
Решение Криса работает, я хочу предоставить некоторый контекст о том, почему ваше этого не делает.
Replace_Character = Replace_Character.replace("!",random.choice(Letters))
Чтобы оценить это, Python должен выяснить, с какими аргументами вызывать str.replace() . Он знает, что первый аргумент "!"
, но ему нужно оценить второй. Поэтому он сначала выполняется random.choice(Letters)
. Допустим, он получает букву q
. Затем он вызывает Replace_Character.replace(«!», «q»). Вы можете видеть, как это будет приводить к одному и тому же символу каждый раз.
Приемы генератора однострочных строк хороши, но могут быть сложными для чтения. Вот эквивалент того, что делает ответ Криса, написанный с помощью простого цикла for.
new_string = ""
for character in old_string:
if (character == "!"):
# generate a random letter to replace the ! with
new_string = random.choice(Letters)
else:
# copy the old text, unmodified
new_string = character
Комментарии:
1. (строки в Python неизменяемы, что означает, что это, вероятно, будет иметь гораздо худшую производительность, чем решение, подобное Chris’, но я думаю, что оно обеспечивает наибольшую ясность в отношении того, что происходит, и это кажется важным здесь)