如何在python中创建函数let_to_num()

如何在python中创建函数let_to_num(),python,Python,在我的作业中,我必须使用列表将数字转换为字母。我能做到这一点,只是我被奖金问题难住了。当输入为空时,索引需要参考[2]。我试图添加一个elif语句,但无论我做什么,我都会继续得到第一个索引。本课程未涵盖任何有关处理空白输入项的信息。我的代码如下: phone_letters = [' ', '','ABC', 'DEF', 'GHI', 'JKL', 'MNO', 'PQRS', 'TUV', 'WXYZ'] letter = input('Enter a single letter, spac

在我的作业中,我必须使用列表将数字转换为字母。我能做到这一点,只是我被奖金问题难住了。当输入为空时,索引需要参考[2]。我试图添加一个elif语句,但无论我做什么,我都会继续得到第一个索引。本课程未涵盖任何有关处理空白输入项的信息。我的代码如下:

phone_letters = [' ', '','ABC', 'DEF', 'GHI', 'JKL', 'MNO', 'PQRS', 'TUV', 'WXYZ']
letter = input('Enter a single letter, space or empty: ')

def let_to_num(letter):
    key = 0
    while key < 10:
        if letter.upper() in phone_letters[key]:
            return key
        elif letter == False: #don't know how to deal with a blank input
            key = 1
        else:
            key = key + 1           
    return "Not Found"

print(letter,"=",let_to_num(letter))
phone_字母=['','ABC','DEF','GHI','JKL','MNO','PQRS','TUV','WXYZ']
字母=输入('输入单个字母、空格或空:')
def let_至_num(字母):
键=0
键<10时:
如果字母[key]中的字母.upper():
返回键
elif letter==False:#不知道如何处理空白输入
键=1
其他:
键=键+1
返回“未找到”
打印(字母“=”,从字母到数字)

即使空字符串为“falsy”,以下比较也不起作用:

“”==False#False
相反,您可以使用逻辑运算符
而不是

不是“”#正确
因此,在代码中,可以使用

def let_to_num(字母):
如果不是字母:
返回1
键=0
键<10时:
如果字母[key]中的字母.upper():
返回键
其他:
键=键+1
返回“未找到”
您还可以删除与列表中的空字符串对应的条目。最后,请注意my_字符串中的
''对于任何字符串都将计算为
True



如果要进一步改进代码,可以查看或查看内置函数。

即使空字符串为“falsy”,以下比较也不起作用:

“”==False#False
相反,您可以使用逻辑运算符
而不是

不是“”#正确
因此,在代码中,可以使用

def let_to_num(字母):
如果不是字母:
返回1
键=0
键<10时:
如果字母[key]中的字母.upper():
返回键
其他:
键=键+1
返回“未找到”
您还可以删除与列表中的空字符串对应的条目。最后,请注意my_字符串中的
''对于任何字符串都将计算为
True



如果您想进一步改进代码,可以查看或查看内置函数。

输入不是您的问题,而是您如何检查。您可能只想在函数的开头放一个检查输入是否为“”的特例

问题是,您正在查看字母是否位于phone_字母的值中,但空字符串将始终与该测试匹配。因此,您的支票在key=0中查找它并“找到”它

因此,您需要尽早检查input==“”并处理它。然后做你的循环(或者别的什么)


请注意,这是一个很好的字典用法。如果您创建了一个包含每个字母编号的字典,那么查找并返回该值就很容易了。它还处理空字符串,没有特殊的大小写

>>> let_to_num = {"": 2,
... " ": 1,
... "A":3,
... "B":3,
... "C":3,
... "D":4}
>>> let_to_num.get("", "Not Found")  # empty string
2
>>> let_to_num.get(" ", "Not Found")  # space
1
>>> let_to_num.get("D", "Not Found")  # regular letter
4
>>> let_to_num.get("$", "Not Found")  # invalid letter
'Not Found'

输入不是你的问题,而是你如何检查。您可能只想在函数的开头放一个检查输入是否为“”的特例

问题是,您正在查看字母是否位于phone_字母的值中,但空字符串将始终与该测试匹配。因此,您的支票在key=0中查找它并“找到”它

因此,您需要尽早检查input==“”并处理它。然后做你的循环(或者别的什么)


请注意,这是一个很好的字典用法。如果您创建了一个包含每个字母编号的字典,那么查找并返回该值就很容易了。它还处理空字符串,没有特殊的大小写

>>> let_to_num = {"": 2,
... " ": 1,
... "A":3,
... "B":3,
... "C":3,
... "D":4}
>>> let_to_num.get("", "Not Found")  # empty string
2
>>> let_to_num.get(" ", "Not Found")  # space
1
>>> let_to_num.get("D", "Not Found")  # regular letter
4
>>> let_to_num.get("$", "Not Found")  # invalid letter
'Not Found'
空条目为
,带空格的条目为
,但是,当空字符串的计算结果为
False
时,空格的计算结果为
True
。 我处理上述代码的方法如下

phone_letters = [' ', '','ABC', 'DEF', 'GHI', 'JKL', 'MNO', 'PQRS', 'TUV', 'WXYZ']
letter = input('Enter a single letter, space or empty: ')

def let_to_num(letter):

    if letter == "": # Make sure it's not an empty string
        return letter

    for index, item in enumerate(phone_letters): # loop over each item in letters
        if letter.upper() in item: # String comp
            return index

    return "Not Found" # Default return if still here
空条目为
,带空格的条目为
,但是,当空字符串的计算结果为
False
时,空格的计算结果为
True
。 我处理上述代码的方法如下

phone_letters = [' ', '','ABC', 'DEF', 'GHI', 'JKL', 'MNO', 'PQRS', 'TUV', 'WXYZ']
letter = input('Enter a single letter, space or empty: ')

def let_to_num(letter):

    if letter == "": # Make sure it's not an empty string
        return letter

    for index, item in enumerate(phone_letters): # loop over each item in letters
        if letter.upper() in item: # String comp
            return index

    return "Not Found" # Default return if still here

欢迎来到SO。如果用户输入
'
'
应该为该情况分配哪个键,您希望发生什么?您想做什么?请给出一些输入和预期输出的示例…您需要分别处理
'
输入。空白条目为
'
,带空格的条目为
'
,但空字符串的计算结果为
False
空格的计算结果为
True
欢迎使用。如果用户输入
'
'
应该为该情况分配哪个键,您希望发生什么?您想做什么?请给出几个输入和预期输出的示例…您需要分别处理
'
输入。空白条目为
'
,带空格的条目为
'
,而空字符串的计算结果为
空格的计算结果为