Синтаксическая ошибка в строке 6 'операторы if / elif' и 'и / или операторы' - PullRequest
1 голос
/ 29 мая 2020

Я постоянно получаю синтаксическую ошибку в строке 6 при попытке запустить этот код. Я пробовал возиться с отступом и безрезультатно просматривал связанные вопросы на этом сайте. Любая помощь будет принята с благодарностью! Спасибо!

#program that reads month and day and outputs season
input_month = input()
input_day = int(input())

#input reading for spring
if ((input_month == 'March') and (20 <= input_day <= 31))
or ((input_month == 'June') and (1 <= input_day <= 20))
    print('Spring')

#input reading for summer
elif (input_month == 'June') and (21 <= input_day <= 30) 
or (input_month == 'September') and (1 <= input_day <= 30)
    print('Summer')

#input reading for Autumn
elif (input_month == 'September') and (22 <= input_day <= 30) 
or (input_month == 'December') and (1 <= input_day <= 20)
    print('Autumn')

#input reading for winter
elif (input_month == 'December') and (21 <= input_day <= 31) 
or (input_month == 'January') and (1 <= input_day <= 31)
or (input_month == 'February') and (1 <= input_day <= 28)
or (input_month == 'March') and (1 <= input_day <= 19)
    print('Winter')

Изменить: ошибка читается как «Ошибка EOL», что в прошлом означало, что я не определил переменную или неправильно записал переменную. Однако, похоже, это не так.

Спасибо всем за помощь !!

Вот обновленный рабочий код, включая все месяцы:

#program that reads month and day and outputs season
input_month = input()
input_day = int(input())

#input reading for spring
if input_month == 'March' and 20 <= input_day <= 31\
or input_month == 'April' and 1 <= input_day <= 30\
or input_month == 'May' and 1 <= input_day <= 31\
or input_month == 'June' and 1 <= input_day <= 20:
    print('Spring')

#input reading for summer
elif input_month == 'June' and 21 <= input_day <= 30\
or input_month == 'July' and 1 <= input_day <= 31\
or input_month == 'August' and 1 <= input_day <= 31\
or input_month == 'September' and 1 <= input_day <= 30:
    print('Summer')

#input reading for Autumn
elif input_month == 'September' and 22 <= input_day <= 30\
or input_month == 'October' and 1 <= input_day <= 31\
or input_month == 'November' and 1 <= input_day <= 30\
or input_month == 'December' and 1 <= input_day <= 20:
    print('Autumn')

#input reading for winter
elif input_month == 'December' and 21 <= input_day <= 31\
or input_month == 'January' and 1 <= input_day <= 31\
or input_month == 'February' and 1 <= input_day <= 28\
or input_month == 'March' and 1 <= input_day <= 19:
    print('Winter')

#if input is not valid
else:
    print('Invalid')

Ответы [ 3 ]

0 голосов
/ 29 мая 2020

Сначала вы забываете использовать точку с запятой в конце каждого оператора if и else. И следующие вещи, если вы хотите продолжить свой оператор в следующей строке, используйте "\" в конце строки. Я привожу пример ниже.

if (input_month == 'June') and (21 <= input_day <= 30) \
  or (input_month == 'September') and (1 <= input_day <= 30):
print('Summer')
0 голосов
/ 29 мая 2020

Это правильный и рабочий код для вашего решения.

input_month = input()
input_day = int(input())

# input reading for spring
if ((input_month == 'March') and (20 <= input_day <= 31)) or ((input_month == 'June') and (1 <= input_day <= 20)):
    print('Spring')

# input reading for summer
elif (input_month == 'June') and (21 <= input_day <= 30) or (input_month == 'September') and (1 <= input_day <= 30):
    print('Summer')

# input reading for Autumn
elif (input_month == 'September') and (22 <= input_day <= 30) or (input_month == 'December') and (1 <= input_day <= 20):
    print('Autumn')

# input reading for winter
elif (input_month == 'December') and (21 <= input_day <= 31) or (input_month == 'January') and (
        1 <= input_day <= 31) or (input_month == 'February') and (1 <= input_day <= 28) or (
        input_month == 'March') and (1 <= input_day <= 19):
    print('Winter')
0 голосов
/ 29 мая 2020

Вот синтаксически правильный код (с обратными косыми чертами):

input_month = input()
input_day = int(input())

if input_month == 'March' and 20 <= input_day <= 31 or input_month \
    == 'June' and 1 <= input_day <= 20:
    print('Spring')
elif input_month == 'June' and 21 <= input_day <= 30 or input_month \
    == 'September' and 1 <= input_day <= 30:
    print('Summer')
elif input_month == 'September' and 22 <= input_day <= 30 \
    or input_month == 'December' and 1 <= input_day <= 20:
    print('Autumn')
elif input_month == 'December' and 21 <= input_day <= 31 or input_month \
    == 'January' and 1 <= input_day <= 31 or input_month == 'February' \
    and 1 <= input_day <= 28 or input_month == 'March' and 1 \
    <= input_day <= 19:
    print('Winter')

Однако есть способы сделать решение более читабельным, pythoni c и компактным. Например, вот так:

MONTHS = ["January", "February", "March", "April", "May", "June",
          "July", "August", "September", "October", "November",
          "December"]

BOUNDARIES = [((3, 20), (6, 20), "Spring"),
              ((6, 21), (9, 21), "Summer"),  # FIXED THE UPPER BOUNDARY
              ((9, 22), (12, 20), "Autumn"),
              ((12, 21), (12, 31), "Winter"),
              ((1, 1), (3, 19), "Winter")]

input_month = input()
input_day = int(input())

input_date = (MONTHS.index(input_month) + 1, input_day)

for lower, upper, season in BOUNDARIES:
    if lower <= input_date <= upper:
        print(season)
        break

или (менее эффективный способ) вот так:

SEASONS = {"Spring": [
               ("March", (20, 32)),
               ("June", (1, 21)),
                ],
           "Summer": [
               ("June", (21, 31)),
               ("September", (1, 31)),
                ],
           "Autumn": [
               ("September", (22, 31)),
               ("December", (1, 21)),
                ],
           "Winter": [
               ("December", (21, 32)),
               ("January", (1, 32)),
               ("February", (1, 29)),
               ("March", (1, 20)),
                ]
           }

input_month = input()
input_day = int(input())

for season in SEASONS:
    for month, day_ranges in SEASONS[season]:
        if input_month == month and input_day in range(*day_ranges):
            print(season)
    else:
        continue
    break
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...