代码报错TypeError: 'int' object is not iterable,疑与变量c相关求排查
解决TypeError: 'int' object is not iterable及日期计算逻辑问题
我看到你遇到了TypeError: 'int' object is not iterable的错误,同时代码里还有几个逻辑问题,咱们一步步拆解解决:
首先说错误的直接诱因,再修正核心逻辑:
1. 变量赋值的写法错误
你第一行的赋值语句写法不符合Python的多变量赋值规范:
m = self._month, y = self._year, c = 0 ; # m - 月份 , _day - 日期 , c - 世纪数, y - 年份后两位
这种写法会被Python解析为单独把self._month赋值给m,再依次赋值y和c,完全不是你想要的同时初始化三个变量的效果。正确的多变量赋值应该写成:
m, y, c = self._month, self._year, 0 # 初始化月份、年份、世纪数变量
2. 世纪数计算的逻辑错误
你用c = m / 100来计算世纪数,这完全搞错了——世纪数是年份的前两位,不是月份除以100!比如2024年的世纪数是20,应该从年份中提取,而不是月份。
结合1/2月的特殊处理(要转成上一年的13/14月),正确的世纪数和年份后两位计算应该是:
if self._month == 1 or self._month == 2: m = self._month + 12 y = self._year - 1 # 1/2月对应上一年的13/14月,年份减1 # 从调整后的年份中提取世纪数和后两位 c = y // 100 # 整数除法取年份前两位,比如2023 → 20 y = y % 100 # 取年份后两位,比如2023 → 23
3. 除法运算的类型问题
Python中/是浮点除法,会返回小数,但蔡勒公式需要整数运算来保证结果正确,所以要把所有/替换成//(整数除法)。
完整修正后的代码
def dayInWeek(self): m, y, c = self._month, self._year, 0 # m - 月份 , _day - 日期 , c - 世纪数, y - 年份后两位 if self._month == 1 or self._month == 2: m = self._month + 12 y = self._year - 1 c = y // 100 y = y % 100 return (self._day + (26 * (m + 1)) // 10 + y + y // 4 + c // 4 - 2 * c) % 7
额外说明
- 关于
TypeError: 'int' object is not iterable:大概率是因为错误的赋值写法导致后续变量类型混乱,修正赋值和逻辑后这个错误就会消失。 - 这个公式是蔡勒公式的变种,不同地区的星期对应关系可能有差异(比如有些版本返回0代表周六,有些代表周一),你可以根据实际需求微调结果。
内容的提问来源于stack exchange,提问作者Barak Michaeli
相关产品推荐
相关产品推荐

