Возникли проблемы с преобразованием списка в целые числа и итерацией по списку - PullRequest
0 голосов
/ 03 октября 2019

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

years = ["25", "1955", "2000", "1581", "1321", "1285", "4365", "4", "1432", "3423", "9570"]
def isLeap():
    year = list(map(int, years))
    if year in years >= 1583:
        print(year, "Is a Gregorian Calendar Year.")
    elif year in years < 1583:
        print(year, "Is not a Gregorian Calendar Year.")
    elif year in years % 400 == 0 or year in years % 4 == 0:
        print(year, "Is a Leap Year.")
    elif year in years % 400 == 1 or year in years % 4 == 1:
        print(year, "Is NOT a Leap Year.")
    else:
        print("Test cannot be performed.")
for i in years:
    isLeap()

Ответы [ 3 ]

0 голосов
/ 03 октября 2019

Учитывая то, что вы пытаетесь сделать, я считаю, что это один из способов сделать это, комбинируя цикл for для элементов, которые вы передаете в функцию (в формате списка), с указанными вами условиями if-elif-else.

years = ["25", "1955", "2000", "1581", "1321", "1285", "4365", "4", "1432", "3423", "9570"]
def isLeap(years):
    for i in years:
        if int(i) >= 1583:
            print(i, "Is a Gregorian Calendar Year.")
        elif int(i) < 1583:
            print(i, "Is not a Gregorian Calendar Year.")
        elif int(i) % 400 == 0 or int(years[i]) % 4 == 0:
            print(i, "Is a Leap Year.")
        elif int(i) % 400 == 1 or int(years[i]) % 4 == 1:
            print(i, "Is NOT a Leap Year.")
        else:
            print("Test cannot be performed.")
isLeap(years)

Выход:

25 Is not a Gregorian Calendar Year.
1955 Is a Gregorian Calendar Year.
2000 Is a Gregorian Calendar Year.
1581 Is not a Gregorian Calendar Year.
1321 Is not a Gregorian Calendar Year.
1285 Is not a Gregorian Calendar Year.
4365 Is a Gregorian Calendar Year.
4 Is not a Gregorian Calendar Year.
1432 Is not a Gregorian Calendar Year.
3423 Is a Gregorian Calendar Year.
9570 Is a Gregorian Calendar Year.
0 голосов
/ 03 октября 2019

Вы должны выполнить преобразование из строки в int вне вашей функции isLeap:

for year in map(int, years):

Ваша функция должна принимать параметр года:

def isLeap(year)

И ваш тест должен быть просто: if year >= 1583 # etc.

Однако здесь также есть логическая проблема: поскольку вы используете if/elif, вы никогда не будете определять, является ли что-товисокосный год, потому что одно из первых двух утверждений if всегда будет правильным. (Либо> = 1583, либо <1583; никакие другие условия никогда не проверяются.) </p>

0 голосов
/ 03 октября 2019

Преобразование списка строк в список целых может быть просто выполнено с помощью понимания списка:

int_list = [int(year) for year in years]

Другая видимая проблема в вашем коде - это понимание области переменных и передача аргументов вfunction.

Если вы выполняете итерации по годам, передайте элемент year вашей функции и используйте ее в области действия функции

def isLeap(year):
...

for int_year in int_list:
    isLeap(int_year)
...