Хорошо, Во-первых, поскольку у вас есть только три варианта меню, строку:
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")
Во-первых, почему вы позволяете 4 и 5 в качестве опции меню, когда у вас есть только 3? Кроме того, когда вы помещаете оператор в цикл, он запускается с каждой итерацией цикла, действительно ли вы хотите задать номер имени каждый раз, когда вы получаете имя от пользователя? – dramzy
SO не является заменой людям, которые не хотят опереться на основы программирования. Если вы можете написать цикл, возможно, вам стоит вернуться к книге или репетитору. –