2015-12-31 4 views
0

В моем скрипте Python у меня есть меню, которое принимает пользовательский ввод, а затем на основе этого ввода печатает некоторые строки с информацией. Это выглядит вроде как это:Python - пробить пользовательский ввод

while True: 
    # Print the menu 
    choice = raw_input('Pick an option: ') 
    if choice == 'item_1': 
     # Display item_1's contents 
    elif choice == 'item_2': 
     # Display item_2's contents 
    # etc... 

Информация, отображаемая каждым item_ немного больше, чем я хочу быть, поэтому я хочу, чтобы разделить каждый из них на несколько страниц.

Чтобы получить доступ к этим разным страницам, я хочу, чтобы он был основан на пользовательском вводе, но вместо того, чтобы иметь совершенно другой вход для каждой страницы, я хочу, чтобы пользователь мог написать номер страницы рядом с исходным вводом (с промежутком между ними). Поэтому, если пользователь вводит item_1 или item_1 1, они получают первую страницу item_1, а если они вводят item_2 2, они получают вторую страницу item_2 и так далее.

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

================================================================================================================================= =============================

EDIT

Я был немного вводит в заблуждение о каждом item и что оно делает. Ранее в сценарии у меня есть это:

def item_1(): 
    # Print line 1 
    # Sleep 
    # Print line 2 
    # Sleep 
    # Print line 3 

def item_2(): 
    # Print line 1 
    # Sleep 
    # Print line 2 
    # Sleep 
    # Print line 3 

То, что я действительно хочу сделать, это определить несколько функций, одна для каждой страницы, а затем вызвать их, когда пользователь вводит номер после `пункта» (вроде аргументы анализа). Как это:

Input item_1 или item_1 1 >> Выход item_1()

Входной item_1 2 >> Выход item_1_p2()

Входной item_3 4 >> Выход item_3_p4()

И, как показано в первом примере ввода, I 'd нравится первая страница данного ввода, которая будет отображаться, если на вкладке не указаны страницы.

+0

'choice.split()' ... –

+0

Ваш план создания функции для каждого элемента очень плохой. Вам нужно будет добавлять код в программу каждый раз, когда вы добавляете новые элементы в базу данных или файл содержимого.В стороне, я не вижу, что вы упоминаете свою прекрасную причину вызова 'sleep()' после каждой строки, поэтому я предполагаю, что у вас ее нет. Не делайте этого, или ваши пользователи быстро расстроятся. – TigerhawkT3

+0

Ну, функции вроде «анимированные» со временем сна 0,1 секунды, это то, что я хочу сохранить. Опять же, извините за более раннюю дезинформацию, но я хотел бы добавить, что все функции в этом скрипте фактически хранятся в другом файле, и я импортирую их в этот, так что добавление или изменение не является проблемой. Единственная проблема, которую я ** делаю **, заключается в том, чтобы выписать 'elif choice == 'item_1 2': item_1_p2()' и т. Д. Для каждой страницы в моем основном скрипте. –

ответ

2

Используйте словарь, который содержит list строк для каждого элемента:

book = {'item_1':['page 1', 'page 2', 'page 3'], 'item_2':['page 1', 'page 2', 'page 3']} 

while True: 
    choice = raw_input('Pick an option: ').split() 
    if not choice: 
     break 
    if len(choice) == 1: 
     for page in book[choice[0]]: 
      print page 
    else: 
     print book[choice[0]][int(choice[1])-1] 

Сначала он разбивает входной сигнал на пробельных. Если пользователь просто нажал Введите без символов, он остановится. В противном случае, это будет сделать следующее:

  1. Проверить сколько членов в результате раскола
  2. Если есть только один термин, что это 'item_x', поэтому распечатать всю запись
  3. Если есть более чем один термин , это 'item_x' и номер страницы, поэтому распечатайте надлежащую страницу
+0

Спасибо за предложение. Я немного поиграл с вашим кодом выше, но не мог заставить его делать именно то, что я хочу. Тем не менее, полезно для тех случаев, когда я хочу печатать строки вместо вызова функций. –

+0

Как я уже сказал, вы не должны создавать для себя эту функцию, в первую очередь. – TigerhawkT3

+0

Но так я хочу, чтобы программа работала. Все, что я ищу, - это решение дилеммы, с которой я сталкиваюсь (т. Е. Разделение ввода и интерпретации каждой части по-своему), не изменяя общую структуру работы сценария. И 'time.sleep (0.1)' в каждой функции не дает пользователям время видеть вещи, а скорее имитирует анимацию, и я не понимаю, почему это плохо. Никто не жаловался на это, на самом деле пользователям это нравилось. Извините, если это произошло как агрессивное, я просто настаиваю только на изменении вещей, которые я хочу изменить, а не на всей структуре программы. –

Смежные вопросы