这个程序永远不会超过菜单选择它不断要求菜单选项?

时间:2017-12-04 00:15:14

标签: python python-2.7

我不确定为什么在我输入菜单之后一直要求输入菜单!

我运行时一直要求我输入一个数字,但它没有运行与数字相关的功能

不确定你是否需要上课,但我还是把它包括在内

import pickle

class Contact:
    def __init__(self, name, phone, email):
        self.__name = name
        self.__phone = phone
        self.__email = email

    def set_name(self, name):
        self.__name = name

    def set_phone(self, phone):
        self.__phone = phone


    def set_email(self, email):
        self.__email = email

    def get_name(self):
        return self.__name

    def get_phone(self):
        return self.__phone

    def get_email(self):
        return self.__email

这些是我的菜单选项,无论我输入的是什么号码都要求我输入另一个号码

LOOK_UP = 1
ADD = 2
CHANGE = 3
DELETE = 4
QUIT = 5


FILENAME = 'contacts.txt'


def main():

    mycontacts = load_contacts()

    choice = 0

    while choice != QUIT:

        choice = get_menu_choice()

        if choice == LOOK_UP:
            look_up(mycontacts)
        elif choice == ADD:
            add(mycontacts)
        elif choice == CHANGE:
            change(mycontacts)
        elif choice == DELETE:
            delete(mycontacts)

    save_contacts(mycontacts)


def load_contacts():
     try:
        input_file = open(FILENAME, 'rb')

        contact_dct = pickle.load(input_file)

        input_file.close()

    except:
        contact_dct = {}

    return contact_dct




def get_menu_choice():
    print()
    print('Menu')
    print('-------------------')
    print('1. Look up an contact')
    print('2. Add a new contact')
    print('3. Change an existing contact')
    print('4. Delet a contsct')
    print('5. Quit the program')
    print()

    choice = int(input('Enter your choice: '))

    while choice < LOOK_UP or choice > QUIT:
        choice = int(input('Enter a vaild choice: '))

        return choice

def look_up(mycontacts):
    name = input('Enter a name: ')

    print(mycontacts.get(name, 'That name is not found'))



def add(mycontacts):
    name = input('Name: ')
    phone = input('Phone: ')
    email = input('Email: ')

    entry = contact.Contact(name, phone, email)

    if name not in mycontacts:
        mycontacts[name] = entry
        print('The entry has been added.')
    else:
        print('That name already exists.')



def change(mycontacts):
    name = input('Enter a name: ')

    if name in mycontacts:
        phone = input('Enter the new phone number: ')

        email = input('New Email: ')

        entry = contact.Contact(name, phone, email)

        mycontacts[name] = entry
        print('information updated')

    else:
        print('not found')

def delete(mycontacts):
    name = input('Enter a name: ')

    if name in mycontacts:
        del mycontacts[name]
        print('Entry deleted')

    else:
        print('That name not found')


def save_contacts(mycontacts):
    output_file = open(FILENAME, 'wb')
    pickle.dump(mycontacts, output_file)
    output_file.close()

main()

1 个答案:

答案 0 :(得分:0)

我认为问题出现在以下功能中:

get_menu_choice()

第一个问题:如果输入的第一个选项位于边界内,则永远不会从return返回。

第二个问题:如果在边界内输入的第一个选项,则while循环只返回下一个选择。

如何修复:将get_menu_choice()语句移到choice = get_menu_choice()中的while循环之外。另外,将main()移至choice中while循环的底部,并将get_menu_choice()的初始值设置为<svg v-html="require('~/assets/sprite.svg')"></svg>

希望这有帮助。

P.S。如果用户输入的选项是不是整数,会发生什么?如果用户输入字符,字符串或控制字符会发生什么?我会考虑对错误输入进行额外的错误处理。