如何在格式化列表中删除tup[3]以打印日历类型输出?

2024-04-26 20:47:25 发布

您现在位置:Python中文网/ 问答频道 /正文

请复制并保存此code.py并输入(不带引号)一天,如“Mer”,然后输入一个非闰年,如2019年,请注意闰日仍显示在打印输出中。如果是闰年,我需要删除tuple[3],然后让它在tuple[3]被排除在列表之外之后打印“tup”列表

EDIT更改确认的回答者提到的所有编辑,得到了良好的代码,我发现错误是我错误地将闰日范围定为70,而为了让代码正常工作,应该将闰日范围定为69。谢谢。

 import numpy as np
 def make_calendar(year, start_day):
    tup =   [('Early Winter', range(1, 37, + 1)),
            ('Mid Winter 37,', range(37, 1, + 1)),
            ('Late Winter   ', range(38, 71, + 1)),
            ('Leap Day      ', range(70, 69 + 1)),#tup[3] is this line i need to delete if not leap year
            ('Late Winter   ', range(71, 74, + 1)),   
            ('Early Spring  ', range(1, 37, + 1)),
            ('Mid Spring 37,', range(37, 1, +1)),
            ('Late Spring   ', range(38, 74, + 1)),
            ('Early Summer  ', range(1, 37, + 1)),
            ('Mid Summer 37,', range(37, 1, +1)),
            ('Late Summer   ', range(38, 74, + 1)),
            ('Early Autumn  ', range(1, 37, + 1)),
            ('Mid Autumn 37,', range(37, 1, +1)),
            ('Late Autumn   ', range(38, 74, + 1)),
            ('Early Fall    ', range(1, 37, + 1)),
            ('Mid Fall 37,  ', range(37, 1, +1)),
            ('Late Fall     ', range(38, 74, + 1))];
    week = ['Mer', 'Ven', 'Ear', 'Mar', 'Jup', 'Sat', 'Ura', 'Nep', 'Plu']
    start_pos = week.index(start_day)
    def is_leap(year): 
        if (not year%4 and year%100 or not year%400): # algorithm to determine leap year
            return True
    if not is_leap(year):
        del tup[3]
    for month, days in tup: 
    # Print month title
        print('{0} {1}'.format(month, year).center(20, ' '))
        # Print Day headings
        print(''.join(['{0:<3}'.format(w) for w in week]))
        # Add spacing for non-zero starting position
        print('{0:<3}'.format('')*start_pos, end='')

        for day in days:
            # Print day
            print('{0!s:<3}'.format(day), end='')
            start_pos += 1
            if start_pos == 9:
                # If start_pos == 9 (Sunday) start new line
                print()
                start_pos = 0 # Reset counter
        print('\n')
start_day=(input('Enter start day of the year Mer,Ven,Ear,Mar,Jup,Sat,Ura,Nep,Plu'))
year=int(input('Enter Year'))       
make_calendar(year, start_day)

这是一个将日历分解成相等单位的程序,我认为这很酷,但不管我做什么,元组[3]都不起作用。如果有人能教我更多关于元组的知识,或者为什么这不起作用,我会非常高兴的。即使你不知道,我也很感激你抽出时间来读我的问题


Tags: posforifnotrangeyearstartleap
1条回答
网友
1楼 · 发布于 2024-04-26 20:47:25

问题可能与这行代码有关:

year=int(input('Enter Year')),

后面的逗号表示year是一个元组,而不是一个普通整数

如果函数is_leap()被调用过,那么它将演示所声明的错误行为

但是,我必须指出,is_leap()函数是定义的,但它从来没有被称为,所以我不得不认为您没有向我们展示真正的代码

更新:

根据你的帖子,这是is_leap()的定义:

def is_leap(year): 
    if (not year%4 and year%100 or not year%400): # **algorithm to determine leap year**
        return True
    if is_leap(year):
        return False
        del tup[3] #**it still prints 2019

如您所见,对is_leap()的调用包含在函数本身中,由于这是整个代码中对该函数的唯一调用,因此从不调用它

也许这是一个缩进错误,if is_leap(year)块实际上意味着超出了一个级别

相关问题 更多 >