Python - ЕСЛИ остальное заявление и возврат - PullRequest
0 голосов
/ 28 января 2020

Я пытаюсь написать код, чтобы пользователь мог ввести букву и вернуть di git, как наша телефонная клавиатура. Моя работа:

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, тогда мы прыгаем чтобы еще и вернуть "Не найдено". «IF» ввод можно найти в phone_letter, затем вернуть «key» и end.

Я не понимаю, почему (возвращаемое «Not Found»), помещенное в оператор else, будет возвращать «Not found» для каждого ввода ? А что за функция "ключ + = 1"

Ответы [ 3 ]

0 голосов
/ 28 января 2020

Попробуйте код ниже,

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())
0 голосов
/ 28 января 2020

Таким образом, идея состоит в том, чтобы перебрать while от ключа = 0 до ключа = 9 (которые являются индексами вашего списка phone_letters). В блоке if вы проверяете условие, если введенный letter является одной из букв текущей итерации key. Например, пользователь вводит букву «P», в то время как начинается l oop -

  1. key = 0, phone_letters [key] = "", условие False. Теперь значение ключа должно быть увеличено, чтобы проверить следующий индекс phone_letters. Ваш код этого не делает, вместо этого он переходит в блок else, который возвращает Not Found в самом первом блоке
  2. key = 1, phone_letters [key] = "", условие False. ...
  3. key = 7, phone_letters [key] = "PQRS", условие истинно.

Только если пользователь вводит символ, которого нет в любые ваших индексов phone_letters, если результат будет Не найден. Надеюсь, что это ясно!

0 голосов
/ 28 января 2020

Проблема, с которой вы столкнулись, связана с тем, что вы установили значение key в 0. Это влияет на ваше заявление if;

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

Это утверждение , in phone_letters[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())

Читайте о понимании списка здесь; Понимание списка в Python

...