所以我试图编写一个程序来计算一年中的某天(365天之内)的日期,并且遇到了这个问题,我无法让for循环与python的range函数一起正常工作。即\
Day = input("Enter day: ")
january = range(1,32)
february = range(32,59)
etc....
months = [january,february,etc....]
for i in months
if Day in i:
return i
但是,这只会返回range(x,y)。我需要它来返回months数组中的位置。例如,如果day为31,则它应返回[0]位置(i = 0),如果day为360,则应返回[12]。我的for循环写错了吗?我对此的另一种解决方案是告诉它返回变量名,而不是返回它分配给它的范围,但是我不知道该怎么做。
答案 0 :(得分:1)
您问题的直接答案是给用户enumerate()
提供索引:
for month, i in enumerate(months):
但是,这似乎是解决该问题的过于复杂的方法。另一种解决方案是存储每个月的天数:
months = [31, 28, 31, etc.]
然后在遍历此列表时使用普通的ol'methmethic:
for days, month in enumerate(months):
if Day <= days:
return month+1, day
Day -= days
请注意,这完全消除了您计算每个月的第一个和最后一个数字的需要。我不认识你,但我宁愿让计算机自己做数学也不愿自己做。另外,我仍然在这里使用枚举。最后,我返回的是月份号和日期,基本上是重新构造日历日期的。 +1
将使一月开始于1而不是0。
答案 1 :(得分:0)
python范围具有.index(value, [start, [stop]])
函数,给出范围内值的索引。
这将返回找到的值的第一个索引,如果不存在则引发ValueError。
答案 2 :(得分:0)
仅返回i
中months
的索引。另外,请注意,如果Day
是31
并且返回0
,则Day=360
应该返回11
,因为months
的最后一个索引是11
不是12
。
Day = input("Enter day: ")
january = range(1,32)
february = range(32,59)
etc....
months = [january,february,etc....]
for i in months:
if Day in i:
return months.index(i)