Не работает меню основных опций - требуется помощь - PullRequest
0 голосов
/ 13 февраля 2019

Я создаю базовую программу телефонной книги, которая может выполнять операции (добавлять новые, обновлять, удалять, искать и выходить).У меня есть первый вариант как добавить запись, а второй как удалить запись.Каждый раз, когда пользователь завершает действие, должна появиться опция выбора действия снова.Когда пользователь выбирает второй раз, он возвращает к первому элементу вместо выбора;Например;1 - добавить новый контакт, 2 - удалить новый контакт.Пользователь выбирает 1, добавляет новый контакт, просит выбрать другой вариант, выбирает 2, но код для варианта 1 запускается снова, чтобы добавить новый вместо удаления.

print("Please select an option from the main menu :\n")

def print_menu():
    print("1 : Add New Entry")
    print("2 : Delete Entry")
    print("3 : Update Entry")
    print("4 : Lookup Number")
    print("5 : QUIT")
    print()

print_menu()

while 1 == 1:
    try:
        menuOption = int(input())
        break
    except:
        print("Invalid! Please choose an option between 1 and 5.")

while menuOption not in(1,2,3,4,5):
    print("Invalid! Please choose an option between 1 and 5.")
    try:
        menuOption = int(input())
        break
    except:
        print("Invalid! Please choose an option between 1 and 5.")

###the above works perfect to set menu and restrict entry

phonebook = {}

#while menuOption != 5:
    #menuOption = int(input("Enter your selection (1-5): "))

while 1 == 1 :

 if menuOption == 1: #
        print("\nNEW CONTACT")
        while True:
            name = input("Contact Name : ") 
            if name.replace(' ','').isalpha():
                break
            print('Please enter a valid name.')
        while True:
            try:
                number = int(input("Contact Number : "))
                if number:
                   break
            except:
                print("Please enter a valid number.")

        if number in phonebook:
            print("Contact already exists. Duplicates are not allowed.\n")
        else:
            phonebook[number] = name 
            print("Success! New contact has been added.\n")

            print("PLEASE SELECT AN OPTION BETWEEN 1 AND 5  \n")
            try:
                option = int(input())
            except:
                 print("Please enter a numeric value between 1 and 5  \n")        


    elif menuOption == 2: ##delete
        print("\nDELETE CONTACT") 
        name = input("Contact Name : ")
        if name in phonebook:
            del phonebook[name]
            print(name, "has been removed from your contacts.")
        else:
            print("Contact not found.")

        print("PLEASE SELECT AN OPTION BETWEEN 1 AND 5  \n")
        try:
            option = int(input())
        except:
            print("Please enter a numeric value between 1 and 5  \n")

Ответы [ 2 ]

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

Добро пожаловать в стек, дождливый день!При просмотре / запуске вашего кода сообщение с напоминанием пользователю ввести от одного до пяти появилось немного больше, чем я ожидал, наряду со случайными другими ошибками, которые вы, вероятно, еще не кодировали.Я бы предположил, что определение большего количества функций (для опций меню) и структурирование вашего кода сделают ваш код более легким для чтения и отслеживания.

Ниже (, что не является полным или безошибочным, кстати)), я реструктурировал ваш код так, чтобы при вызове main() отображались пункты меню телефонной книги, и пользователь мог выбрать другой вариант.Вместо использования длинных «else-if» / elif между различными функциями, различные подпрограммы меню аккуратно организованы в одном операторе while в функции main(), а варианты выбора организованы в 5 различных функций: add() /delete() и т. Д. (Я помещаю фиктивный код в fns update / lookup / exit).Я надеюсь, что вы найдете это полезным.Я обнаружил, что если я ввел строку, когда в качестве входных данных ожидалась цифра, она выдала сообщение об ошибке.Я вставил комментарии, чтобы помочь.

Надеюсь, это поможет

phonebook= []

def main():
    print("\n\tPhone Book") #title

# main menu
    print("\n\tMain Menu")
    print("\t1. Add a contact")
    print("\t2. Delete a contact")
    print("\t3. Update a contact")
    print("\t4. Look up")
    print("\t5. Quit")

    menuOption = int(input("\nPlease select one of the five options "))

    while menuOption not in(1,2,3,4,5)  :
        ## insert try/except error handling needed here to handle NaN ##
        print("\nPlease insert a numeric option between 1 and 5")
        menuOption =int(input())

    while menuOption <=5:
        mOpt =menuOption
        if menuOption == 1:
            Add(mOpt)
        elif menuOption == 2:
            Delete(mOpt)
        elif menuOption == 3:
            Update(mOpt)
        elif menuOption == 4:
            LookUp(mOpt)
        elif menuOption == 5:
            ExitPhone(mOpt)
        else:
           print("Invalid input! Please insert a value between 1 and 5")

# add contact
def Add(mOpt):
    ##Option 1
    add = ""
    contact = True

    print("\n\tADD CONTACT")

    while contact == True:
          if mOpt == 1: 
              print("\nNEW CONTACT")
              while True:
                 name = input("Contact Name : ") 
                 if name.replace(' ','').isalpha():
                    break
                 print('Please enter a valid name.')
              while True:
                  try:
                     number = int(input("Contact Number : "))
                     if number:
                          break
                  except:
                       print("Please enter a valid number.")

              if number in phonebook:
                 print("Contact already exists. Duplicates are not allowed.\n")
              else:
                 #item = name + number this won't be found in the delete function
                 phonebook.append(name)
                 phonebook.append(number)

                 #print(phonebook)
                 print("Success! New contact has been added.\n")

          add = input("Would you like to add another? Y (yes) or N (no)")
          add = add.lower()

          if add=="yes" or add=="y":
            contact = True
          else:
            contact = False
            main()

# delete
def Delete(mOpt):
    redel = ""
    delcontact = True

    print("\n\tDELETE CONTACT")

    while delcontact == True:
        if mOpt == 2:
            print("Enter Contact Name:")
            name = input("Contact Name : ")
            if name in phonebook:
              ## insert code here to find associated number 
              ## and concatenate it if you have created an 'item'
              phonebook.remove(name) #removes name, leaves the number
              print(name, "has been removed from your contacts.")
              #print(phonebook)
            else:
              print("Contact not found.")

        redel = input("Would you like to delete another? Y (yes) or N (no)")
        redel = redel.lower()

        if redel =="yes" or redel =="y":
            delcontact = False
        else:
            delcontact = True
            main()

def Update(mOpt):
  if mOpt == 3: 
      print("\nUpdate function")
      main()

def LookUp(mOpt):
   if mOpt == 4: 
      print("\nLookUp function")
      main()

def ExitPhone(mOpt):
  if mOpt == 5: 
    print ("Exit?")
    main()

main()
0 голосов
/ 13 февраля 2019

Ваш код проверяет значение menuOption, но вводит option.Просто измените

option = int(input())

на

menuOption = int(input())
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...