Если постановка проблемы - питон - PullRequest
0 голосов
/ 11 мая 2018

Я пытаюсь выполнить цикл с некоторыми операторами if, но, похоже, возникают проблемы с прерыванием цикла, если я ввел неправильное имя. Прямо сейчас варианты - Чикаго, Нью-Йорк и Вашингтон. Я хочу, чтобы код сломался и вывел «упс», если я введу не тот город. Прямо сейчас он выводит «упс», но только после ввода города и месяца. Любая помощь будет принята с благодарностью. Я прошу прощения за грязный код.

def common_day1(city, month):
    city = input("Enter city: ")
    month = int(input("Enter Month: "))
    city_month = df_merged[['City','Month','Day']]
    if city == "Chicago":
        if month == 1:
            city_month = city_month.loc[(city_month['City'] == 'CHI') & (city_month['Month'] == 1)]
            common_day = city_month['Day'].value_counts().argmax()
            print("The most common day for {} during {} is {}.".format(city,month,common_day))
        elif month == 2:
            city_month = city_month.loc[(city_month['City'] == 'CHI') & (city_month['Month'] == 2)]
            common_day = city_month['Day'].value_counts().argmax()
            print("The most common day for {} during {} is {}.".format(city,month,common_day))
        elif month == 3:
            city_month = city_month.loc[(city_month['City'] == 'CHI') & (city_month['Month'] == 3)]
            common_day = city_month['Day'].value_counts().argmax()
            print("The most common day for {} during {} is {}.".format(city,month,common_day))
        elif month == 4:
            city_month = city_month.loc[(city_month['City'] == 'CHI') & (city_month['Month'] == 4)]
            common_day = city_month['Day'].value_counts().argmax()
            print("The most common day for {} during {} is {}.".format(city,month,common_day))
        elif month == 5:
            city_month = city_month.loc[(city_month['City'] == 'CHI') & (city_month['Month'] == 5)]
            common_day = city_month['Day'].value_counts().argmax()
            print("The most common day for {} during {} is {}.".format(city,month,common_day))
        elif month == 6:
            city_month = city_month.loc[(city_month['City'] == 'CHI') & (city_month['Month'] == 6)]
            common_day = city_month['Day'].value_counts().argmax()
            print("The most common day for {} during {} is {}.".format(city,month,common_day))
    elif city == "New York":
        if month == 1:
            city_month = city_month.loc[(city_month['City'] == 'NYC') & (city_month['Month'] == 1)]
            common_day = city_month['Day'].value_counts().argmax()
            print("The most common day for {} during {} is {}.".format(city,month,common_day))
        elif month == 2:
            city_month = city_month.loc[(city_month['City'] == 'NYC') & (city_month['Month'] == 2)]
            common_day = city_month['Day'].value_counts().argmax()
            print("The most common day for {} during {} is {}.".format(city,month,common_day))
        elif month == 3:
            city_month = city_month.loc[(city_month['City'] == 'NYC') & (city_month['Month'] == 3)]
            common_day = city_month['Day'].value_counts().argmax()
            print("The most common day for {} during {} is {}.".format(city,month,common_day))
        elif month == 4:
            city_month = city_month.loc[(city_month['City'] == 'NYC') & (city_month['Month'] == 4)]
            common_day = city_month['Day'].value_counts().argmax()
            print("The most common day for {} during {} is {}.".format(city,month,common_day))
        elif month == 5:
            city_month = city_month.loc[(city_month['City'] == 'NYC') & (city_month['Month'] == 5)]
            common_day = city_month['Day'].value_counts().argmax()
            print("The most common day for {} during {} is {}.".format(city,month,common_day))
        elif month == 6:
            city_month = city_month.loc[(city_month['City'] == 'NYC') & (city_month['Month'] == 6)]
            common_day = city_month['Day'].value_counts().argmax()
            print("The most common day for {} during {} is {}.".format(city,month,common_day))
    elif city == "Washington":
        if month == 1:
            city_month = city_month.loc[(city_month['City'] == 'WAS') & (city_month['Month'] == 1)]
            common_day = city_month['Day'].value_counts().argmax()
            print("The most common day for {} during {} is {}.".format(city,month,common_day))
        elif month == 2:
            city_month = city_month.loc[(city_month['City'] == 'WAS') & (city_month['Month'] == 2)]
            common_day = city_month['Day'].value_counts().argmax()
            print("The most common day for {} during {} is {}.".format(city,month,common_day))
        elif month == 3:
            city_month = city_month.loc[(city_month['City'] == 'WAS') & (city_month['Month'] == 3)]
            common_day = city_month['Day'].value_counts().argmax()
            print("The most common day for {} during {} is {}.".format(city,month,common_day))
        elif month == 4:
            city_month = city_month.loc[(city_month['City'] == 'WAS') & (city_month['Month'] == 4)]
            common_day = city_month['Day'].value_counts().argmax()
            print("The most common day for {} during {} is {}.".format(city,month,common_day))
        elif month == 5:
            city_month = city_month.loc[(city_month['City'] == 'WAS') & (city_month['Month'] == 5)]
            common_day = city_month['Day'].value_counts().argmax()
            print("The most common day for {} during {} is {}.".format(city,month,common_day))
        elif month == 6:
            city_month = city_month.loc[(city_month['City'] == 'WAS') & (city_month['Month'] == 6)]
            common_day = city_month['Day'].value_counts().argmax()
            print("The most common day for {} during {} is {}.".format(city,month,common_day))
    else:
        print("oopsie")

Ответы [ 2 ]

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

Из вашего кода это слишком сложно сказать.Возможно, вы используете слово city как локальную переменную и как входной параметр.

Я не понимаю, почему вы передаете город в качестве ввода, а затем просите пользователя ввести город снова.

Вы должны очистить свой код и сгруппировать общие инструкции, например:

def common_day1(city, month):
    cities = ["Chicago", " New York"]
    if city not in cities:
        print("oopsie")
        return
    city_month = city_month.loc[(city_month['City']
    if city =="Chicago":
         city_month = (city_month == "CHI") & city_month==...
0 голосов
/ 11 мая 2018

Вы принимаете city и month в качестве аргументов, а затем немедленно переназначаете их на основе пользовательского ввода, поэтому то, что вы передаете функции, игнорируется.

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

Кроме того, вы много раз копируете один и тот же код, вы можете извлечь этот код, чтобы его было легче читать и понимать.

Попробуйте:

def common_day1(city: str, month: int):
    city_month = df_merged[['City', 'Month', 'Day']]
    city_map = {
        "Chicago": "CHI",
        "New York": "NYC",
        "Washington": "WAS"
    }
    if city in city_map.keys() and 0 < month < 6:
        city_month = city_month.loc[(city_month['City'] == city_map[city]) & (city_month['Month'] == month)]
        common_day = city_month['Day'].value_counts().argmax()
        print("The most common day for {} during {} is {}.".format(city, month, common_day))
    else:
        print("oopsie")


city = input("Enter city: ")
month = int(input("Enter Month: "))
common_day1(city, month)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...