我是 python 和一般编码的新手。这是我的作业中的一个问题,以及我当前的代码。我知道我只有其中一个部分,但我想先弄清楚这一部分,然后再继续其他部分。通过我的循环,我可以找到并识别字母 i,但我不知道如何将 i 更改为 1。
问题:
许多用户创建的密码简单易猜。编写一个程序,该程序接受一个简单的密码,并通过使用下面的键替换字符并附加“!”来使其更强大 到输入字符串的末尾。 py i becomes 1 a becomes @ m becomes M B becomes 8 s becomes $ 例如:如果输入是: py mypassword 输出是: py Myp@$$word! 提示:Python 字符串是不可变的,但支持字符串连接。在给定的密码变量中存储和构建更强的密码。
许多用户创建的密码简单易猜。编写一个程序,该程序接受一个简单的密码,并通过使用下面的键替换字符并附加“!”来使其更强大 到输入字符串的末尾。
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 = 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) + "!"