Traceback (последний вызов был последним): файл «Calculator.py», строка 50, в menu_1 int (key_1) ValueError: недопустимый литерал для int () с основанием 10: «hgd» - PullRequest
0 голосов
/ 10 февраля 2019

Вот весь мой код:

CUT_0 = .129
CUT_1 = .30
CUT_2 = .10
CUT_3 = .029
CUT_4 = .5
CUT_5 = 'Hello, and welcome to'
CUT_6 = 'Please try a valid option.'
C7 = '\n'
C8 = input('Please enter an option >>> ')

def e_Calc():

    print('Hello')

def settings():

    print('Hello x2')

function_List = {

    '1' : e_Calc,
    '2' : settings,
    '3' : quit

}
menu_List = {

    1 : 'E-Bay Fee Calculator',
    2 : 'Settings',
    3 : 'Exit'
}

def menu_1():

    key_1 = 0
    x = 1

    print(CUT_5 + ' the Online Tool Application.' + C7)
    while x < 4:
        print(str(x) + '.', menu_List[x])
        x += 1

    print(C7)

    key_1 = C8

    print(C7)

    try:
        int(key_1)
        try:
            function_List[key_1]()

        except KeyError:
            return (print(CUT_6 + C7), menu_1())

    except ValueError:
        return (print(CUT_6 + C7), menu_1())



menu_1()

Сначала все работало идеально, даже элементы управления на входе.Затем мне пришла в голову идея ввести в меню «menu_List [4]», и это дало мне ошибку, аналогичную названию.Теперь у меня не отображается меню, а только опция ввода.После того, как я введу пункт меню, если это опция, он покажет меню, затем запустит соответствующую функцию, в противном случае он выдаст ту же ошибку, что и заголовок.

Есть ли кто-нибудь, кто может объяснить, как я могу заставить мою программу делать то, что она делала изначально, как написан код или как это вообще получилось?Если вы можете предоставить исправление, которое было бы хорошо, если оно есть.

Ответы [ 2 ]

0 голосов
/ 10 февраля 2019

Хорошо, проблема в том, что глобальная переменная C8 выполняла ввод перед выполнением функции menu ().

0 голосов
/ 10 февраля 2019

Вы сделали две ошибки (я прокомментировал эти строки), вы должны удалить строку: C8 = input ('Пожалуйста, введите опцию >>>'), потому что код python выполняется построчно, и до того, как какая-либо из ваших функций будетзапустить, он просит вас ввести значение.После этого вы должны изменить строку: key_1 = C8 с помощью: key_1 = input ('Пожалуйста, введите опцию >>>'). Вот код, который должен работать так, как вы хотите:

CUT_0 = .129
CUT_1 = .30
CUT_2 = .10
CUT_3 = .029
CUT_4 = .5
CUT_5 = 'Hello, and welcome to'
CUT_6 = 'Please try a valid option.'
C7 = '\n'
# C8 = input('Please enter an option >>> ')

def e_Calc():

    print('Hello')

def settings():

    print('Hello x2')

function_List = {

    '1' : e_Calc,
    '2' : settings,
    '3' : quit

}
menu_List = {

    1 : 'E-Bay Fee Calculator',
    2 : 'Settings',
    3 : 'Exit'
}

def menu_1():

    key_1 = 0
    x = 1

    print(CUT_5 + ' the Online Tool Application.' + C7)
    while x < 4:
        print(str(x) + '.', menu_List[x])
        x += 1

    print(C7)

    #key_1 = C8
    key_1 = input('Please enter an option >>> ')

    print(C7)

    try:
        int(key_1)
        try:
            function_List[key_1]()

        except KeyError:
            return (print(CUT_6 + C7), menu_1())

    except ValueError:
        return (print(CUT_6 + C7), menu_1())



menu_1()
...