如何删除格式化列表中的 top[3] 以打印日历类型输出?
how to del tup[3] in formated list to print calendar type output?
请复制并保存此 code.py 并输入(不带引号)日期,例如 "Mer",然后输入非闰年,例如 2019 年,注意打印输出中仍显示闰日.如果是闰年,我需要删除元组 [3],然后在元组 [3] 从列表
中排除后让它打印 'tup' 列表
编辑更改确认的回答者提到的所有编辑导致了良好的代码,我发现错误是我将闰日范围错误地设置为 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)
这是一个将日历分解为相等单位的程序,我认为它很酷,但无论我做什么,tuple[3] 都不起作用。如果有人可以教我更多关于元组的知识,或者为什么这不起作用,我将非常感激。即使你不知道,我也感谢你抽出时间阅读我的问题。
问题可能与这行代码有关:
year=int(input('Enter Year')),
结尾的逗号表示 year
是一个 元组 ,而不是普通整数。
如果函数 is_leap()
曾经被调用过,那么它会演示所述的错误行为。
但是,我必须指出 is_leap()
函数是 定义的 但它从未被 调用 ,所以我有认为您没有向我们展示正版代码。
更新:
根据你的post,这是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)
块实际上是要缩进一级?
请复制并保存此 code.py 并输入(不带引号)日期,例如 "Mer",然后输入非闰年,例如 2019 年,注意打印输出中仍显示闰日.如果是闰年,我需要删除元组 [3],然后在元组 [3] 从列表
中排除后让它打印 'tup' 列表编辑更改确认的回答者提到的所有编辑导致了良好的代码,我发现错误是我将闰日范围错误地设置为 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)
这是一个将日历分解为相等单位的程序,我认为它很酷,但无论我做什么,tuple[3] 都不起作用。如果有人可以教我更多关于元组的知识,或者为什么这不起作用,我将非常感激。即使你不知道,我也感谢你抽出时间阅读我的问题。
问题可能与这行代码有关:
year=int(input('Enter Year')),
结尾的逗号表示 year
是一个 元组 ,而不是普通整数。
如果函数 is_leap()
曾经被调用过,那么它会演示所述的错误行为。
但是,我必须指出 is_leap()
函数是 定义的 但它从未被 调用 ,所以我有认为您没有向我们展示正版代码。
更新:
根据你的post,这是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)
块实际上是要缩进一级?