Python-IF-Else语句并返回

Python-IF-Else语句并返回,python,if-statement,return-value,Python,If Statement,Return Value,我正在尝试编写一个代码,让用户输入一个字母并返回数字,就像我们的手机键盘一样。我的工作是: phone_letters = [" ", "", "ABC", "DEF", "GHI", "JKL", "MNO", "PQRS", "TUV", "WXYZ"] def let_to_num(): letter =input("Enter: ") key = 0 while key < 10: if letter.upper() in phone

我正在尝试编写一个代码,让用户输入一个字母并返回数字,就像我们的手机键盘一样。我的工作是:

phone_letters = [" ", "", "ABC", "DEF", "GHI", "JKL", "MNO", "PQRS", "TUV", "WXYZ"]


def let_to_num():

    letter =input("Enter: ")
    key = 0
    while key < 10:

        if letter.upper() in phone_letters[key]:
            return key
        else:
            return "Not found"

print(let_to_num())
phone_字母=[“”、“”、“ABC”、“DEF”、“GHI”、“JKL”、“MNO”、“PQRS”、“TUV”、“WXYZ”]
def let_to_num():
字母=输入(“输入:”)
键=0
键<10时:
如果字母[key]中的字母.upper():
返回键
其他:
返回“未找到”
打印(让_到_num())
但是它不起作用,正确答案应该是:

while key < 10:

        if letter.upper() in phone_letters[key]:
            return key
        else:
            key += 1
return "Not found"
键<10时:
如果字母[key]中的字母.upper():
返回键
其他:
键+=1
返回“未找到”
我的理解是“如果”输入不在电话信中,那么我们跳转到“其他”并返回“未找到”。“如果”输入可以在电话信中找到,然后返回“键”并结束


我不明白为什么else语句中的(return“Not found”)会为每个输入返回“Not found”?“key+=1”的函数是什么?

您遇到的问题是由于您将
key
的值设置为0。这会影响您的
if
语句

if letter.upper()在电话字母[key]中:

这表示,
在电话字母[0]:
中是
,因此您对字母的检查不会返回
true
,因为它不在

下面的代码解决了这些问题,请查看底部的学习链接和代码功能注释,快乐学习

phone_letters = [" ", "", "ABC", "DEF", "GHI", "JKL", "MNO", "PQRS", "TUV", "WXYZ"]


def let_to_num():

    letter =input("Enter: ")

    while letter.isalpha(): # Only runs if the input is a alphabetical char

        # index of the item in list, if the letter is found within the value
        # of the list item. This loops over every element in the list.
        number = [idx for idx, value in enumerate(phone_letters) if letter.upper() in value]

        return number[0] if number else 'Not Found'

print(let_to_num())
在这里阅读列表理解

试试下面的代码

def let_to_num():
    letter = input("Enter: ")
    for i in range(len(phone_letters)):
        if letter.upper() in phone_letters[i]:
            return i
    return 'Not found'
print(let_to_num())

因此,这里的想法是迭代
,同时
从key=0到key=9(这是你的
phone_字母
列表的索引)。在if块中,检查输入的
字母是否为
键当前迭代的字母之一。

例如,用户输入字母“P”,while循环开始-

  • key=0,电话字母[key]=“”,条件为False。现在,key的值必须增加,以便检查电话字母的下一个索引。您的代码没有这样做,而是转到else块,它返回在第一个块中找不到的内容
  • key=1,电话字母[key]='',条件为False。
  • 键=7,电话字母[键]=“PQRS”,条件为真
  • 只有当用户输入的字符不存在于任何电话字母索引中时,才会找不到结果。

    希望这能说明问题

    key+=1
    key=key+1
    具有相同的效果。代码的其余部分现在更有意义了吗?
    返回“未找到”
    将立即退出函数
    key
    不是由一引发的,只有当
    letter.upper()
    phone\u letters[0]
    中时才有验证。如果你要理解:
    to\u number={letter:i代表i,letter in enumerate(phone\u letters)代表letter in letter}
    然后
    number=to\u number.get(letter.upper(),“未找到”)
    @stephernauch使用类似的概念更新了代码。还解决了在不匹配时引发错误的问题。