Я пишу генератор паролей, и я столкнулся с этой досадной проблемой, и это повторение числа или буквы в одной строке. Пользователь дает программе формат того, как они хотят, чтобы их пароль был сгенерирован ex «C @@ d %%%» , где @ - только буквы и где% - только числа, а пользователь также вводит числа и буквы для генерации пароль, тогда программа должна распечатать что-то вроде cold123, но вместо этого выведет cood111 или clld111, я опубликую фрагмент моего кода ниже, но, пожалуйста, не противно его, я довольно новичок в python , самоучкой и всего лишь пару месяцев в опыте питона.Как я могу остановить свою программу от создания того же ключа?
class G()
.
.
.
# self.forms is the format the user input they can input things such as [email protected]@d%%%
# where @ is only letters and where % is only numbers
# self.Bank is a list where generated things go
AlphaB = [] #list Of All Of The Positions That have The @ sign in The self.forms
NumB = [] #list of All of the positions that have a % sign
for char in self.forms:
if char == '@':
EOL=(self.Position) # Positions End Of Line
Loc = self.forms[EOL] # Letter
AlphaB.append(EOL)
if char == '%':
EOL=(self.Position)
Loc = self.forms[EOL]
NumB.append(EOL)
self.Position+=1 # Move right a position
for pos in AlphaB:
for letter in self.alphas: #letters in The User Inputs
GenPass=(self.forms.replace(self.forms[pos],letter))
#Not Fully Formatted yet, because Only The letter been formatted
if GenPass.find('%'):
for Pos in NumB:
for number in self.ints:
GenPass=(GenPass.replace(GenPass[Pos],number))
if GenPass not in self.Bank:
#Cood111
print (GenPass)
self.Bank.append(GenPass)
else:
if GenPass not in self.Bank:
print (GenPass)
self.Bank.append(GenPass)
Это упражнение, не так ли? Производственный код – l0b0
Я думаю, что проблема заключается в функции 'replace()', которая заменяет все вхождения старого новым. Я верю, что если вы передадите ему третий аргумент ', 1', вместо него будет заменено только первое вхождение, а не все из них – depperm