问题描述
因此,我进行了很多搜索,但没有发现与我的问题完全相似的内容。我的问题是:我有几个月的天数清单。看起来像这样:
daysInMonth = [31,28,31,30,31]
现在,我已经有了一个year年公式,可以将{daysInMonth[1]
更改为29
。
我需要根据用户输入的月份来汇总列表中选定数量的值。这样做的原因是,儒略日是一年中到输入日期为止的天数。因此用户输入一个日期,例如1 31 2020
,则儒略日将是:31
,所以2 2 2020
将是:33
,而12 31 2020
将是:366
,因为今年是a年。希望这是有道理的。
我在高中时就使用C ++进行了这个项目,我正在尝试将其转换为Python。我正在尝试执行的C ++版本如下所示:
int findingTheMonth(int daysInMonth[],int julianDay,int day,int month)
{
for (int i = 0; i < (month-1); i++)
{
julianDay = julianDay + daysInMonth[i];
}
julianDay = julianDay + day;
return julianDay;
}
我在Python中的版本是这样:
def findTheJulian(day,month,daysInMonth):
# sum together the months up until the users entered month
# then add the amount of days of the users entered month
julianDay = sum(daysInMonth[month-1]) + day
return julianDay
失败的原因是因为它说int对象不是可迭代的,但是我不明白为什么它给了我这个。我不是在尝试更改整数或在整数上写...我正在尝试通过汇总列表中的一些元素并将新的值存储到julianDay中,然后用户输入day。我该怎么办?另外,我是Python的新手。我可能还不太了解很多事情,但是我有编码背景,应该能够弄清楚。
解决方法
问题是您要从daysInMonth中获取一个元素。例如,如果您通过daysInMonth == [31,28,31,30,31]
和month == 3
,则会得到31
。并且sum(31)
会引发错误,因为您无法获得数字的总和。
您要达到的目标是分割列表的一部分(month
之前的所有元素)。切片语法为list[start:end]
。您可以忽略start
并仅设置end
,那么start
将为0。
您的情况:julianDay = sum(daysInMonth[:month-1]) + day
daysInMonth[month-1]
从daysInMonth获取特定的值。您想要做的是daysInMonth[:month-1]
(注意冒号)。这样可以使您获得daysInMonth的一部分,然后sum()
就可以对其进行迭代。