Вложенный выбор в программе Python - PullRequest
1 голос
/ 27 января 2010

У меня есть скрипт, который я написал на python для тестирования алгоритмов сортировки, которые я реализовал. Основная часть программы просит пользователя выбрать один из алгоритмов сортировки из списка. И затем, хотят ли они отсортировать из файла чисел или выбрать список случайных чисел. Я настроил его (я думаю), чтобы при наборе числа, которого нет в первом списке вариантов, просто выведите «Bad choice» и попробуйте снова получить число.

[Редактировать] После получения совета ответа я изменил пару входов на необработанные. И я изменил структуру программы. Теперь он работает отлично, за исключением того, что все еще печатает «Плохой выбор» даже после успеха.

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"

Моя проблема в том, что он работает, как и ожидалось, для первой части, где он вернет неправильный выбор для числа, которого нет в списке, и получит fileOrRandom (), но он все равно печатает «Bad Choice» при выборе хороших значений Я должен распечатать результаты, потому что sorter.timedSort(sorter.sort) выполняет мой алгоритм сортировки и выводит на экран кучу других вещей. Я просто упускаю что-то простое или есть лучший способ справиться с этими вложенными опциями в программе на Python?

1 Ответ

0 голосов
/ 27 января 2010

используйте raw_input ()

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

ваш цикл while должен выглядеть следующим образом (после исправления отступа)

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"
...