用户输入包含空格时出现 ValueError

问题描述 投票:0回答:2

以下代码获取用户输入,然后输出用户输入中每个字母的反向英文字母版本。但是,它只适用于任何仅包含字母的字符串,如果用户输入有空格字符(或符号,但符号对于此代码并不重要),它会显示

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.

有什么办法可以解决吗?

python valueerror
2个回答
0
投票

这里是你的代码修改后可以正常工作,删除了不必要的 -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)

0
投票

你可以简单地保留空间。

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)

备注:

  1. str
    是可迭代的,您不需要任何
    list
    变量
  2. 你可以反向工作而不是创造逆转(
    L-i-1
  3. 您可以导入
    as
    别名,这可以大大减少您需要做的输入量
  4. 在您的情况下,在
    find
    上使用
    str
    优于在
    index
    上使用
    list
    find
    返回
    -1
    如果找不到项目。
    index
    引发错误 - 你得到的错误。
© www.soinside.com 2019 - 2024. All rights reserved.