Python - Как создать для обработки ошибок ввода нескольких пользователей? - PullRequest
0 голосов
/ 03 мая 2018

Я новичок в python, и я пытался создать обработку ошибок для ввода нескольких пользователей. Я сделал код следующим образом. `

#load and filter dataset
import pandas as pd

CITY_DATA = {'Chicago' : 'chicago.csv',
            'New York City':'new_york_city.csv',
            'Washington':'washington.csv'}

#filtering dataset
def get_filters ():

    city_options = ['Chicago','New York City','Washington'.title()]
    month_options = ['January','February','March','April','May','June','July','August','September','November','December','all'.title()]
    day_options = ['Monday','Tuesday','Wednesday','Thursday','Friday','Saturday','Sunday','all']

    while True:
        city = input('\nInsert name of the city to analyze! (Chicago, New York City, Washington)\n'.title())
        if city in city_options :
            break
        else:
            print('Your choice is not available. Please try again')

    while True:
        month = input('\nInsert month to filter by or "all" to apply no month filter! (January, February, etc.)\n'.title())
        if month in month_options :
            break
        else:
            print('Your choice is not available. Please try again')

    while True:
        day = input('\nInsert day of the week to filter by or "all" to apply no day filter! (Monday, Tuesday, etc.)\n'.title())
        if day in day_options :
            break
        else:
            print('Your choice is not available. Please try again')

    return city, month, day

Но я считаю, что есть более простой способ для этого или, может быть, создать функцию? Любая помощь будет принята с благодарностью!

Ответы [ 2 ]

0 голосов
/ 03 мая 2018

Немного переработанная версия вашего решения. Не уверен, что это очень помогает.

def get_valid_input(input_msg, options):
    while True:
        entered_value = input(input_msg)
        if entered_value in options:
            break
        else:
            print('Your choice is not available. Please try again')
            continue

def get_filters():
    city_options = ['Chicago', 'New York City', 'Washington'.title()]
    month_options = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'November',
                     'December', 'all'.title()]
    day_options = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday', 'all']

    city_input_msg = 'Insert name of the city to analyze! (Chicago, New York City, Washington): '
    get_valid_input(city_input_msg, city_options)

    month_input_msg = 'Insert month to filter by or "all" to apply no month filter! (January, February, etc.): '
    get_valid_input(month_input_msg, month_options)

    day_input_msg = 'Insert day of the week to filter by or "all" to apply no day filter! (Monday, Tuesday, etc.): '
    get_valid_input(day_input_msg, day_options)

    return city, month, day
0 голосов
/ 03 мая 2018

Вы можете использовать операторы try / исключением и цикл один раз для всех трех входов вместо повторения цикла снова и снова. Вот что я придумал. Если это не поможет, с удовольствием удалим его.

def get_filters():
    city_options, month_options, day_options = ['Chicago','New York City','Washington'.title()], ['January','February','March','April','May','June','July','August','September','November','December','all'.title()], ['Monday','Tuesday','Wednesday','Thursday','Friday','Saturday','Sunday','all'.title()]
    while True:
        try:
            city = city_options.index(input('\nInsert name of the city to analyze! (Chicago, New York City, Washington)\n'.title()))
            month = month_options.index(input('\nInsert month to filter by or "all" to apply no month filter! (January, February, etc.)\n'.title()))
            day = day_options.index(input('\nInsert day of the week to filter by or "all" to apply no day filter! (Monday, Tuesday, etc.)\n'.title()))
            return city_options[city], month_options[month], day_options[day]
        except ValueError:
            print ("Your previous choice is not available. Please try again")
print (get_filters())
...