Python:循环和编辑字符串字符
我是 python 和一般编码的新手。这是我的作业中的一个问题,以及我当前的代码。我知道我只有其中一个部分,但我想先弄清楚这一部分,然后再继续其他部分。通过我的循环,我可以找到并识别字母 i,但我不知道如何将 i 更改为 1。
问题:
许多用户创建的密码简单易猜。编写一个程序,该程序接受一个简单的密码,并通过使用下面的键替换字符并附加“!”来使其更强大 到输入字符串的末尾。
py i becomes 1 a becomes @ m becomes M B becomes 8 s becomes $
例如:如果输入是:
py mypassword
输出是:
py Myp@$$word!
提示:Python 字符串是不可变的,但支持字符串连接。在给定的密码变量中存储和构建更强的密码。
代码:
word = input()
password = ()
for letter in word:
if letter == 'i':
password = password+'1'
else: password = password+letter
print(password)
输入:igigigig 输出:igigigig
-
首先,您将密码初始化为错误的变量选择。
password = ()
将密码设置为元组。尝试将字符添加到元组变量将导致异常:>>> password = () >>> password = password + '1' Traceback (most recent call last): File "<input>", line 1, in <module> TypeError: can only concatenate tuple (not "str") to tuple
接下来,您有问题中提供的字符映射。您可以首先创建一个字典来表示此映射。
mapping = { 'i': '1', 'a': '@', 'm': 'M', 'B': '8', 's': '$', }
在循环字母时,您可以使用映射来确定是否应该进行替换:
for letter in word: if letter in mapping: password = password + mapping.get(letter) else: password = password + letter
您还忘记
!
在末尾添加 。最后结果:
mapping = { 'i': '1', 'a': '@', 'm': 'M', 'B': '8', 's': '$', } word = "mypassword" password = "" for letter in word: if letter in mapping: password = password + mapping[letter] else: password = password + letter password += "!" print(password)
进一步简化:
for letter in word: password += mapping.get(letter, letter) password += "!"
更进一步的理解!:
password = ''.join(mapping.get(l, l) for l in word) + "!"