Слишком много значений для распаковки ошибки в библиотеке календаря - PullRequest
0 голосов
/ 28 июня 2018

Я пытаюсь устранить ошибку «слишком много значений для распаковки». Этот код пытается напечатать название месяца в соответствии с високосными годами и номерами концов месяцев. Я хочу, чтобы 'x, y in i, j' давало название месяца в соответствии с номерами конца месяца.

import calendar
year=2000
a=calendar.isleap(year)
if a ==False :
    print('this is not a leap year')
    x=[0,31,59,90,120]
    y=[31,59,90,120,151]

    for i,j in zip(x, y):
                        if (i,j) == (0,31):
                            (i,j)=str('Jan')
                        if (i,j) == (31,59):
                            (i,j)=str('Feb')
                        if (i,j)==(59,90):
                            (i,j)=str('March')
                        if (i,j)==(90,120):
                            (i,j)=str('Apr')
                        if (i,j)==(120,151):
                            (i,j)=str('May')

                            print('Mont_'+ (x,y))

else: 
    print ('This is a leap year')
    x=[0,31,60,91,121,152]
    y=[31,60,91,121,152,182]
    for i,j in zip(x, y):
                        if (i,j) == (0,31):
                            (i,j)=str('Jan')
                        if (i,j) == (31,60):
                            (i,j)=str('Feb')
                        if (i,j)==(60,91):
                            (i,j)=str('March')
                        if (i,j)==(91,121):
                            (i,j)=str('Apr')
                        if (i,j)==(121,152):
                            (i,j)=str('May')
                        if (i,j)==(152,182):
                            (i,j)=str('Jun')
                            print('Mont_'+ (x,y))

1 Ответ

0 голосов
/ 28 июня 2018

Ваши ошибки возникают, когда вы используете что-то вроде (i,j)=str('Jan'). Когда вы назначаете несколько переменных одновременно, вы спрашиваете: «разбейте содержимое моего списка / кортежа / string на переменные v1, v2, v3, ..., vn, в этом порядке». В частности, в этом случае вы просите Python разбить строку из 3 символов (например, 'Jan' на две переменные). Python не знает, как с этим справиться.

Глядя на ваш код, я думаю, что вы действительно хотите что-то вроде этого:

print ('This is a leap year')
x=[0,31,60,91,121,152]
y=[31,60,91,121,152,182]
for i,j in zip(x, y):
    if i,j == 0,31:            # The parenthesis aren't necessary> Python implicitly converts this to a tuple
        month='Jan'            # Same with the string. No need to explicitly declare it a string - Python is very clever :)
    elif (i,j) == (31,60):
        month='Feb'
    elif (i,j)==(60,91):
        month='Mar'
    elif (i,j)==(91,121):
        month='Apr'
    elif (i,j)==(121,152):
        month='May'
    elif (i,j)==(152,182):
        month='Jun'
    else:
        month='n/a'

    print('Mont_'+ month)

Также обратите внимание на использование elif после первого if. Хотя в этом случае ваши результаты будут такими же, использование elif действует как связующий агент для группировки всего блока вместе.

Возьмите следующий пример

a = 'string'
if a == 'string':
    a = some_function()
if a == 'int':
    a = some_other_function()

Если по какой-то причине some_function() возвращает значение 'int', то после этого блока кода a будет иметь возвращаемое значение some_other_function(). Использование elif здесь защищает от вызовов some_function() и some_other_function().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...