一尘不染

Python:循环和编辑字符串字符

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


阅读 97

收藏
2022-07-06

共1个答案

一尘不染

首先,您将密码初始化为错误的变量选择。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) + "!"
2022-07-06