Вот код, который я написал до сих пор:

def Ordinal(check):
    data={1:"First", 2:"Second", 3:"Third", 4:"Fourth", 5:"Fifth", 6:"Sixth", 7:"Seventh", 8:"Eighth", 9:"Ninth", 10:"Tenth", 11:"Eleventh", 12:"Twelfth"}

    if check in dict.keys: 
        return dict.get(check)
    else:
        return""
def main():
    Num=input("Enter a number (1-12) to get its ordinal: ")
    print ("The ordinal is", Ordinal(Num))
main()          

Предполагается, что программа получает число от 1 до 12 от пользователя и затем печатает его порядковый номер. У меня возникают проблемы с использованием ввода и проверкой, является ли это ключ, а затем возвращает его значение в качестве оператора печати в основной функции. Ошибка связана с оператором if.

1
0ceanwaves 17 Дек 2015 в 06:11

4 ответа

Лучший ответ

Ваша проблема с if check in data.keys:, потому что:

data.keys это метод: <built-in method keys of dict object at 0x10b989280>

Вы должны вызвать метод data.keys(), который возвращает [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]

Или вы можете сделать:

def Ordinal(check):
    data={1:"First", 2:"Second", 3:"Third", 4:"Fourth", 5:"Fifth", 6:"Sixth", 7:"Seventh", 8:"Eighth", 9:"Ninth", 10:"Tenth", 11:"Eleventh", 12:"Twelfth"}

    if check in data:
        return data.get(check)
    else:
        return""
def main():
    Num=input("Enter a number (1-12) to get its ordinal: ")
    print ("The ordinal is", Ordinal(Num))
main()

Или, как указал @astrosyam, использование data.get(int(check), "") - более чистый способ.

1
jianweichuah 17 Дек 2015 в 03:34

Попробуй это ...

def Ordinal(check):
    data={1:"First", 2:"Second", 3:"Third", 4:"Fourth", 5:"Fifth", 6:"Sixth", 7:"Seventh", 8:"Eighth", 9:"Ninth", 10:"Tenth", 11:"Eleventh", 12:"Twelfth"}
    return data.get(int(check), "")

def main():
    Num=input("Enter a number (1-12) to get its ordinal: ")
    print ("The ordinal is", Ordinal(Num))
main()

Проверка if не нужна, так как dict.get может вернуть значение по умолчанию.

3
ShadowRanger 17 Дек 2015 в 03:20

Может как то так? Не печатайте вывод, если они вводят неверный ключ.

data = {
    1: "First", 2: "Second", 3: "Third", 4: "Fourth", 5: "Fifth",
    6: "Sixth", 7: "Seventh", 8: "Eighth", 9: "Ninth", 10: "Tenth",
    11: "Eleventh", 12: "Twelfth"}


def Ordinal(check):
    return data[check]


def main():
    Num = input("Enter a number (1-12) to get its ordinal: ")

    try:
        print ("The ordinal is {}".format(Ordinal(int(Num))))
    except ValueError:
        print("didnt enter a valid integer")
    except KeyError:
        print("Not number between 1-12")

main()

Если вы используете Python 2.x, используйте raw_input вместо input.

0
Paul Rooney 17 Дек 2015 в 03:27

Чтобы добавить ответ Брайана Окли, вы можете сделать следующее:

def Ordinal(check):
    data={1:"First", 2:"Second", 3:"Third", 4:"Fourth", 5:"Fifth", 6:"Sixth", 7:"Seventh", 8:"Eighth", 9:"Ninth", 10:"Tenth", 11:"Eleventh", 12:"Twelfth"}

    if check in data:
        return data.get(check)
    else:
        return""
def main():
    Num=eval(input("Enter a number (1-12) to get its ordinal: ")) #notice eval here!
    print ("The ordinal is", Ordinal(Num))
main()

Обратите внимание, что я добавил eval в строке ввода.

0
jfish003 17 Дек 2015 в 03:26