2016-12-04 3 views
0

Comment pourrais-je arrêter mon code en boucle après avoir ajouté la quantité de noms que l'utilisateur a entré au lieu de le faire:Comment pourrais-je arrêter la boucle quand, après son ajouté les noms à la liste et d'autres erreurs

    Ajouter
  1. Nom
  2. Afficher la liste
  3. Quitter

Entrez votre choix: 1

Combien de noms wou Vous souhaitez entrer: 2 # Comment définir un maximum de 10 noms ici?

Entrez le nom: Bob

Entrez le nom: Jim

Combien de noms souhaitez-vous entrer: # Comment pourrais-je arrêter cette ligne de répéter?

Code actuel:

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

Tout d'abord, pourquoi permettez-vous 4 et 5 options de menu lorsque vous avez seulement 3? Aussi, quand vous mettez une instruction dans une boucle, elle s'exécute à chaque itération de la boucle, voulez-vous vraiment demander le numéro de nom chaque fois que vous obtenez un nom de l'utilisateur? – dramzy

+0

SO n'est pas une substitution aux personnes ne voulant pas s'appuyer sur les bases de la programmation. Si vous pouvez écrire une boucle, vous devriez peut-être revoir un livre ou un tuteur. –

Répondre

1

D'accord, Tout d'abord, cette ligne puisque vous ne disposez de trois options de menu,:

while choice >5 or choice <1: 

devrait ressembler à ceci:

while 3 < choice < 1: 

donc votre fonction DisplayMenu ressemble à ceci:

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 

Vous aussi dit que votre fonction addname était en boucle pour toujours, c'est parce que vous avez une boucle while infinie.

Qu'est-ce que vous avez besoin, comme @ettanany dit, est une boucle:

Dans votre cas, la boucle for fonctionnerait aussi:

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) 

Que cela ne demande à l'utilisateur combien de noms il veut entrer, puis exécute le code à l'intérieur de la boucle pour ce nombre de fois - donc si l'utilisateur entre le numéro 9, il demandera 9 noms.

Vous avez également dit qu'il devrait y avoir un maximum de 10 noms. Nous pouvons utiliser une boucle while comme vous l'avez fait dans la fonction DisplayMenu pour vous assurer que l'utilisateur entre un numéro qui est de 10 ou ci-dessous:

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) 

Enfin, dans votre fonction displayData, vous voulez « diviser » les noms et imprimez-les.

Il suffit de faire print(names) nous donnerait un résultat comme celui-ci:

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

Si nous voulons avoir l'air agréable, nous avons besoin d'utiliser une boucle.

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

Cela donnera un résultat comme celui-ci:

Spam 
Eggs 
Waheed 

Ce qui est beaucoup mieux que simplement l'impression de la liste.

complète (fixe) Code:

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

Au lieu de while True, vous devez utiliser while i < number, de sorte que votre fonction addname() devrait être la suivante:

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 

Dans votre cas, la boucle for fonctionnerait aussi:

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)