2017-02-08 3 views
-1

Я пишу программу, использующую python3, чтобы упростить отчет, который я использую для работы. Это не должно быть архитектурно здоровым или элегантным, на самом деле я просто пробивал себе путь через него, вплоть до того, что он «работал».Функции, вызываемые не по порядку?

Методы сами по себе прекрасно работают, но когда я их ввожу, они не вызываются в порядке, когда я их запускаю. Я собираюсь опубликовать весь код здесь, потому что я знаю, что кто-то собирается спросить что-то, связанное с тем, что не отображается. Опять же, я написал это очень быстро, чтобы просто работать. Это не должно быть что-то построенное профессионалом.

Мой вопрос: почему мои методы не вызываются по порядку. Я делаю это так, чтобы словарные значения заполнялись входом , а затем предполагалось рассчитать предварительные значения. Но происходит то, что он вызывает метод расчета процентных ставок, поэтому я застреваю, получая деление по ошибке Zero (что да, когда вызывается из строя, потому что информация, технически технически еще не введена).

def enter_waste(): 
    while True: 
     machine_selection = str(input('Please enter which machine you would like to enter the waste for: ')) 
     for element in machine_list: 
      if machine_selection == element['name']: 
       print('You Have Selected: {}'.format(element['name'])) 
       waste_input = int(input('Please enter the waste for this period: ')) 
       element['waste'].append(waste_input) 
       if str(input('Do you want to continue? yes/no: ')) == 'no': 
        print("\nHere's everything as entered: \n") 
        for i, machine in enumerate(machine_list): 
         print(i, machine) 
       return False 

def enter_weight(): 
    machine_selection = str('Please enter which machine you would like to enter the produced weight for: ') 
    for element in machine_list: 
     if machine_selection == element['name']: 
      print('You have selected: {}'.format(element['name'])) 
      weight_input = int(input('Please enter weight produced for this period: ')) 
      element['weight'] = weight_input 
      if str(input('Do you want to continue? yes/no: ')) == 'no': 
       print("\nHere's everything as entered: \n") 
       for i, machine in enumerate(machine_list): 
        print(i, machine) 
       return False 

def calculate_waste_percentage(): 
    for element in machine_list: 
     percentage = (sum(element['waste'])/element['weight']) * 100 
     element['percentwaste'] = percentage 
     print('Machine: {}\nWeight Produced: {;,}\n% of Waste: {}%'.format(element['name'], element['weight'], percentage)) 
     return percentage 

Однако, когда я называю их по порядку, как это:

enter_waste(), enter_weight(), calculate_waste_percentage() 

Это будет вызывать enter_waste(), но затем перейти к calculate_waste_percentage вместо запуска enter_weight(). Есть ли способ исправить это?

+0

Я сомневаюсь, что он должен вести себя так, как вы упомянули –

+0

Почему бы не назвать их по одному, а не запятыми? – brthornbury

+0

Это все код? Когда я пытаюсь запустить его, я получаю не определенные ошибки. –

ответ

2

Вы пропали без вести input вызова в вашей input_weight() функции:

machine_selection = str(input('...')) 

вместо

machine_selection = str('...') 

Как написано, ваш код пытается установить вес на машине с именем «Пожалуйста, введите какую машину вы бы например, ввести полученный вес для: ", которого не существует.

Я бы предложил также добавить проверку, что имя машины было введено правильно, чтобы предотвратить такую ​​ошибку в будущем.

+3

Просто 'input ('...')' отлично (т. Е. Автоматически строка); это Python 3. – Tagc

Смежные вопросы