以下代码获取用户输入,然后输出用户输入中每个字母的反向英文字母版本。但是,它只适用于任何仅包含字母的字符串,如果用户输入有空格字符(或符号,但符号对于此代码并不重要),它会显示
ValueError
。
我如何让它也适用于空间?
import string
#Gets every letter in the alphabet:
alphabets = list(string.ascii_lowercase)
#create some list to do something, which will be explained later;
res = []
res2 = []
#Gets user input:
getString = str(input()).lower()
#Gets every letter in the input:
get_all_letters = [x for x in getString]
#Create for loop then find the index of every letter in user input in alphabet, append it to the res list:
for x in range(-1,len(get_all_letters)-1):
x+=1
if get_all_letters[x-1] in alphabets:
m = alphabets.index(get_all_letters[x])
res.append(m)
#Reverse the alphabet:
reversed_alphabets = alphabets[::-1]
#Create for loop to append every element in the reversed alphabet by given index in the res list to the res2 list:
for x in res:
res2.append(reversed_alphabets[x])
#Convert the res2 list to string:
n = "".join(res2)
#print it:
print(n)
如果用户在循环外或循环内包含空格,我尝试附加一个空格,它运行但显示意外输出。所以,我决定删除它。这里还有一些输入示例、预期输出和我的输出:
输入:“Hello World”
预期输出:“svool dilow”
我的输出:ValueError: ' ' is not in list.
输入:“猫”
期望输出:“xzg”
我的输出:“wzg”
输入:“cat”
预期输出:“xz g”
我的输出:ValueError: ' ' is not in the list.
有什么办法可以解决吗?
这里是你的代码修改后可以正常工作,删除了不必要的 -1/+1/-1:
import string
#Gets every letter in the alphabet:
alphabets = string.ascii_lowercase
#create some list to do something, will be explained later;
res = []
res2 = []
#Gets user input:
getString = input().lower()
#Create for loop then find the index of every letter in user input in alphabet, append it to the res list:
for x in range(len(getString)):
if getString[x] in alphabets:
m = alphabets.index(getString[x])
res.append(m)
#Reverse the alphabet:
reversed_alphabets = alphabets[::-1]
#Create for loop to append every element in the reversed alphabet by given index in the res list to the res2 list:
for x in res:
res2.append(reversed_alphabets[x])
#Convert the res2 list to string:
n = "".join(res2)
#print it:
print(n)
Python 粉丝会注意到,任何执行
range(len(x))
的 for 循环几乎总是可以通过迭代 x: 来做得更好
for x in getString:
if x in alphabets:
m = alphabets.index(x)
res.append(m)
你可以简单地保留空间。
from string import ascii_lowercase as alpha
L = len(alpha)
def encrypt_input() -> str:
out = ''
for c in input().lower():
#get "reverse character" else keep `c`
if (i := alpha.find(c)) > -1:
c = alpha[L-i-1]
out = f'{out}{c}'
return out
encrypted = encrypt_input()
print(encrypted)
备注:
str
是可迭代的,您不需要任何 list
变量L-i-1
)as
别名,这可以大大减少您需要做的输入量find
上使用 str
优于在 index
上使用 list
。 find
返回 -1
如果找不到项目。 index
引发错误 - 你得到的错误。