返回变量而不是其分配的范围

时间:2018-10-28 21:01:30

标签: python arrays

所以我试图编写一个程序来计算一年中的某天(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循环写错了吗?我对此的另一种解决方案是告诉它返回变量名,而不是返回它分配给它的范围,但是我不知道该怎么做。

3 个答案:

答案 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)

仅返回imonths的索引。另外,请注意,如果Day31并且返回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)