2016-12-04 6 views
0

Как бы остановить свой код цикла после того, как он добавил количество имен пользователь вводится вместо выполнения этого:Как бы остановить цикл, когда после того, как его добавили имена в списке и другие ошибки

  1. Добавить Имя
  2. Показать список
  3. Выход

Введите свой выбор: 1

Сколько имен WOU Если вы хотите ввести: 2 # Как бы установить здесь максимум 10 имен?

Введите имя: Bob

Введите имя: Джим

Сколько имен вы хотели бы ввести: # Как бы я остановить эту линию от повторения?

Фактический код:

names = [] 
def displayMenu(): 
    print(" 1. Add Name") 
    print(" 2. Show list") 
    print(" 3. Quit") 
    choice = int(input("Enter your choice : ")) 
    while choice >5 or choice <1: 
     choice = input("Invalid. Re-enter your choice: ") 
    return choice 

def addname(): 
    while True: 
     number=int(input('How many names would you like to enter: ')) 
     name = [input('Enter name:') for _ in range(number)] 
     names.append(name) 

def displayData(): 
    #name.split(",") how would i correctly user split here 
    print(names) 

option = displayMenu() 

while option != 3: 
    if option == 1: 
     addname() 
    elif option == 2: 
     displayData() 
    option = displayMenu() 

print("Program terminating") 
+0

Во-первых, почему вы позволяете 4 и 5 в качестве опции меню, когда у вас есть только 3? Кроме того, когда вы помещаете оператор в цикл, он запускается с каждой итерацией цикла, действительно ли вы хотите задать номер имени каждый раз, когда вы получаете имя от пользователя? – dramzy

+0

SO не является заменой людям, которые не хотят опереться на основы программирования. Если вы можете написать цикл, возможно, вам стоит вернуться к книге или репетитору. –

ответ

1

Хорошо, Во-первых, поскольку у вас есть только три варианта меню, строку:

while choice >5 or choice <1: 

должен выглядеть следующим образом:

while 3 < choice < 1: 

Так что ваша функция displayMenu выглядит следующим образом:

names = [] 
def displayMenu(): 
    print(" 1. Add Name") 
    print(" 2. Show list") 
    print(" 3. Quit") 
    choice = int(input("Enter your choice : ")) 
    while 3 < choice < 1: # Only accept choices in between 3 and 1 
     choice = input("Invalid. Re-enter your choice: ") 
    return choice 

Вы также сказал, что ваша функция addname циклически завершается, потому что у вас бесконечный цикл while.

Что вам нужно, так как @ettanany сказал, это цикл:

В вашем случае, for цикл будет работать также:

def addname(): 
    number = int(input('How many names would you like to enter: ')) 
    for i in range(number): 
     name = input('Enter name: ') 
     names.append(name) 

Что это делает спросить пользователя сколько имен он хочет ввести, а затем запускает код внутри цикла за такое количество раз, поэтому, если пользователь вводит номер 9, он попросит 9 имен.

Вы также сказали, что должно быть не более 10 имен. Мы можем использовать время цикла, как вы делали в функции displayMenu, чтобы убедиться, что пользователь вводит номер, который 10 или ниже:

def addname(): 
    number = int(input('How many names would you like to enter: ')) 
    while number > 10: # Don't allow any numbers under 10 
     number = int(input('Please enter a number under 10: ')) 
    for i in range(number): 
     name = input('Enter name: ') 
     names.append(name) 

Наконец, в функции displayData, вы хотите, чтобы «разбить» имена и распечатайте их.

Просто делать print(names) даст нам результат:

[ 'Spam', 'Eggs', 'Waheed' ] 

Если мы хотим, чтобы хорошо выглядеть, мы должны использовать цикл.

for name in names: 
    print(name) # You can change this line to print(name, end=' ') 
        # If you want all the names on one line. 

Это даст результат, как этот:

Spam 
Eggs 
Waheed 

который выглядит намного лучше, чем просто печать из списка.

Complete (фиксированный) Код:

names = [] 
def displayMenu(): 
    print(" 1. Add Name") 
    print(" 2. Show list") 
    print(" 3. Quit") 
    choice = int(input("Enter your choice : ")) 
    while 3 < choice < 1: # Only accept choices in between 3 and 1 
     choice = input("Invalid. Re-enter your choice: ") 
    return choice 

def addname(): 
    number = int(input('How many names would you like to enter: ')) 
    while number > 10: # Don't allow any numbers under 10 
     number = int(input('Please enter a number under 10: ')) 
    for i in range(number): 
     name = input('Enter name: ') 
     names.append(name) 

def displayData(): 
    for name in names: 
     print(name) # You can change this line to print(name, end=' ') 
         # If you want all the names on one line. 

option = displayMenu() 

while option != 3: 
    if option == 1: 
     addname() 
    elif option == 2: 
     displayData() 
    option = displayMenu() 

print("Program terminating") 
0

Вместо while True, вам нужно использовать while i < number, так что ваша addname() функция должна выглядеть следующим образом:

def addname(): 
    i = 0 
    number = int(input('How many names would you like to enter: ')) 
    while i < number: 
     name = input('Enter name: ') # We ask user to enter names one by one 
     names.append(name) 
     i += 1 

В вашем случае, for цикл будет работать также:

def addname(): 
    number = int(input('How many names would you like to enter: ')) 
    for i in range(number): 
     name = input('Enter name: ') 
     names.append(name)