【问题标题】:Python- IF Else statement and returnPython- IF Else 语句并返回
【发布时间】:2020-01-28 04:35:20
【问题描述】:

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

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())

但它不起作用,正确答案应该是:

while key < 10:

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

我的理解是“IF”输入不在 phone_letter 中,然后我们跳转到 else 并返回“未找到”。 “IF”输入可以在phone_letter中找到,然后返回“key”并结束。

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

【问题讨论】:

  • key+=1key = key + 1 的效果相同。现在剩下的代码更有意义了吗?
  • return "Not found" 将立即退出您的函数。 key 没有被提升一,只有当 letter.upper()phone_letters[0] 中时才进行验证,仅此而已。

标签: python if-statement return-value


【解决方案1】:

所以这里的想法是将 while 从 key = 0 迭代到 key = 9(这是您的 phone_letters 列表的索引)。在 if 块中,您检查输入的letter 是否是key 的当前迭代的字母之一。
例如,用户输入字母 'P',while 循环开始 -

  1. key = 0,phone_letters[key] = " ",条件为 False。 现在必须增加 key 的值才能检查 phone_letters 的下一个索引。您的代码没有这样做,而是转到在第一个块中返回 Not Found 的 else 块
  2. key = 1,phone_letters[key] = "",条件为 False。 ...
  3. key = 7,phone_letters[key] = "PQRS",条件为真。

只有当用户输入的字符在您的 phone_letters 索引的任何中都不存在时,结果才应该是 Not Found。
希望能说明白!

【讨论】:

    【解决方案2】:

    试试下面的代码,

    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())
    

    【讨论】:

      【解决方案3】:

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

      if letter.upper() in phone_letters[key]:

      这说明in phone_letters[0]:" ",因此您对一封信的检查永远不会返回true,因为它不在" " 中。

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

      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())
      

      在此处阅读列表理解; List Comprehension in Python

      【讨论】:

      • 如果你要理解:to_number = {letter: i for i, letters in enumerate(phone_letters) for letter in letters} 然后number = to_number.get(letter.upper(), 'Not Found')
      • @StephenRauch 更新了具有类似概念的代码。如果不匹配则抛出错误也解决了问题。