2010-01-27 5 views
1

J'ai un script que j'ai écrit en python pour tester les algorithmes de tri que j'ai implémentés. La partie principale du programme demande à l'utilisateur de sélectionner parmi les algorithmes de tri d'une liste. Et puis, ils voudraient trier à partir d'un fichier de nombres ou sélectionner une liste de nombres aléatoires. Je l'ai installé (je pense) de sorte que taper un numéro qui n'est pas dans la première liste de choix affichera simplement "Mauvais choix" et essayer d'obtenir le numéro à nouveau. [Edit] Après avoir pris l'avis de la réponse, j'ai changé quelques entrées pour les entrées brutes. Et j'ai changé la structure du programme. Il fonctionne maintenant parfaitement, sauf qu'il imprime toujours "Bad Choice", même après un succès.Choix imbriqués dans un programme python

def fileOrRandom(): 
    return raw_input("Would you like to read from file or random list? (A or B): ") 

choices = {1:SelectionSorter,2:ComparisonSorter} 
print "Please enter the type of sort you would like to perform." 
print "1. Selection Sort\n2. Comparison Sort" 
while(True): 
    try: 
    choice=input("Your choice: ") 
    for i in range(2): 
    if(choice==i+1): 
     choice2=fileOrRandom() 
     if(choice2=='A'): 
     fileName=raw_input("Please Enter The Name of the File to sort: ") 
     sorter = choices[choice](fileName) 
     sorter.timedSort(sorter.sort) 
     elif(choice2=='B'): 
     num = input("How many random numbers would you like to sort: ") 
     sorter = choices[choice](None,num) 
     sorter.timedSort(sorter.sort) 
     else: 
     raise Exception 
    else: 
     raise Exception 
    break 
    except Exception: 
    print "Bad Choice" 

Mon problème est que cela fonctionne comme prévu pour la première partie où il retournera mauvais choix pour un certain nombre thats pas dans la liste, et il se fileOrRandom(), mais il imprime toujours « mauvais choix » lors de la sélection de bonnes valeurs devrait imprimer mes résultats parce sorter.timedSort(sorter.sort) exécute mon algorithme de tri et imprime un tas d'autres choses à l'écran. Est-ce que je manque juste quelque chose de simple ou est-ce qu'il y a une meilleure manière de traiter ces options imbriquées dans un programme de python?

+0

votre indentation sont fausses. regle-le, s'il te plait. – ghostdog74

Répondre

0

utilisation raw_input()

def fileOrRandom(): 
    return raw_input("Would you like to read from file or random list? (A or B): ") 

votre boucle while devrait ressembler à ceci (après la fixation du retrait)

while True : 
    choice=raw_input("Your choice: ") 
    for i in range(2): 
    if choice==i+1 and fileOrRandom()=="A" : 
     fileName=raw_input("Please Enter The Name of the File to sort: ") 
     sorter = choices[choice](fileName) 
     sorter.timedSort(sorter.sort) 
    elif choice==i+1 and fileOrRandom()=="B" : 
     num = raw_input("How many random numbers would you like to sort: ") 
     sorter = choices[choice](None,num) 
     sorter.timedSort(sorter.sort) 
    elif choice in ['q','Q']: break 
    else: print "Bad choice" 
+0

L'instruction break est indentée un trop dans votre réponse car elle ne fonctionne pas du tout de cette façon dans la mienne. Avec la rupture au bon endroit, il imprime encore "Mauvais Choix" après l'exécution avec l'option B –

+0

utilisez raw_input() pour toute votre entrée() et essayez à nouveau. En outre, supprimez toutes les accolades dans vos instructions if car elles sont redondantes. Enfin, je propose de sortir de la boucle si l'utilisateur entre q ou Q. – ghostdog74

+1

puisque vous utilisez la boucle infini, je ne vois aucune raison d'utiliser l'essai/exception. – ghostdog74

Questions connexes