鞍山市网站建设_网站建设公司_建站流程_seo优化
2025/12/21 20:30:28 网站建设 项目流程

今日何日兮?阿珍想要知道某年某月某日是这一年的第几天,给出了月份和月份对应天数的字典。
请定义函数calDay(),传入参数年月日year,month,day。
1.判断是否为闰年,若是,则将2月日期改为29;
2.判断年份格式是否正确,正确格式为4位数年份,若不在4位数年份范围,则输出"输入的年份格式错误!";
3.判断月份格式是否正确,月份格式为1-12月,若不在范围内,输出"输入的月份格式错误!";
4.判断日是否在对应月份日的范围内,如4月,若输入的是31,则输出"输入的日格式错误!";
最后计算出2021年的5月20日是这一年的第几天,调用函数并输出结果"2021年5月20日是这一年的第xx天!"。

d = {1:31, 2:28, 3:31, 4:30, 5:31, 6:30, 7:31, 8:31, 9:30, 10:31, 11:30, 12:31}

实际答案:

d = {1:31, 2:28, 3:31, 4:30, 5:31, 6:30, 7:31, 8:31, 9:30, 10:31, 11:30, 12:31}def calDay(year, month, day):d = {1:31, 2:28, 3:31, 4:30, 5:31, 6:30, 7:31, 8:31, 9:30, 10:31, 11:30, 12:31}if (year % 4 == 0) & (year % 100 != 0):d[2] = 29else:d[2] = 28if (year < 1000) | (year > 9999):print("输入的年份格式错误!")if (month < 1) | (month > 12):print("输入的月份格式错误!") if (day > d[month]):print("输入的日格式错误!")  num_day = 0for i in range(month):if i == 0:continuenum_day = num_day + d[i]num_day = num_day + dayprint(f"{year}年{month}月{day}日是这一年的第{num_day}天!")calDay(2021, 5, 20)

参考答案:
image

点评:
遇到了局部变量和全局变量的问题,
比如:

#为什么输出的是1呢?我想要的是根据条件输出:
a = 1def calDay(h):if h > 5:a = 2else:a = 3calDay(3)  
print(a)

想要在函数里面更改全部变量,需要加上关键字global来声明;

a = 1def calDay(h):global a  # 🎯 关键:告诉Python"我要修改全局变量a"if h > 5:a = 2else:a = 3calDay(3)
print(a)  # 现在输出:3 ✅

或者方案二:使用返回值return,好处是更方便、更清晰:

def calDay(h):if h > 5:return 2else:return 3a = calDay(3)  # 🎯 通过返回值重新赋值
print(a)  # 输出:3 ✅

而在标准答案中:
可以直接修改!
原因:
字典和列表是特例,可以直接在函数内部进行增加、修改等操作。
但是不能重新赋值,否则视为重新定义了一个局部变量。

# 列表示例 - 可以直接修改!
my_list = [1, 2, 3]def modify_list():my_list.append(4)  # ✅ 可以直接修改,不需要globalmy_list[0] = 99    # ✅ 可以直接修改元素modify_list()
print(my_list)  # 输出:[99, 2, 3, 4]# 但是重新赋值就不行:
def reassign_list():my_list = [5, 6, 7]  # ❌ 这会创建新的局部变量reassign_list()
print(my_list)  # 输出:[99, 2, 3, 4](没变!)

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询