You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何根据星期名称获取对应序号?求替代if-else的日期函数方案

解决方法:使用日期函数将星期名称转为对应序号

首先,你遇到的NameError是因为没有正确导入Python的日期类,且错误调用了方法。date.weekday()是日期对象的实例方法,不能直接传入字符串调用,而且你没有导入date类(它属于datetime模块)。

下面是完全符合你需求的实现,用日期函数替代繁琐的if-else:

方案1:使用datetime.strptime解析并获取序号

这个方法利用datetime模块的字符串解析功能,将星期名称转为日期对象,再通过isoweekday()方法直接得到你要的序号(周一=1,周二=2...周日=7)。

from datetime import datetime

def weekday_to_number(weekday_name):
    try:
        # %A 用于匹配完整的英文星期名称(如Monday、Tuesday)
        date_obj = datetime.strptime(weekday_name, "%A")
        # isoweekday() 返回1-7,正好对应周一到周日的序号需求
        return date_obj.isoweekday()
    except ValueError:
        return "请输入有效的英文星期名称,比如Monday"

# 测试示例
input_day = input("请输入星期名称:")
print(weekday_to_number(input_day))

代码说明:

  • from datetime import datetime:导入datetime类,这样才能使用它的strptime解析方法。
  • datetime.strptime(weekday_name, "%A"):将输入的星期名称字符串解析为一个日期对象(默认年份为1900,不影响我们获取星期序号)。
  • isoweekday():这个方法返回的序号完全匹配你的需求,而weekday()方法返回0(周一)到6(周日),需要额外加1,所以用isoweekday()更直接。
  • 异常处理:防止用户输入无效的星期名称(比如拼写错误、非英文名称),返回友好提示。

方案2:使用calendar模块(可选)

如果你想尝试另一种日期相关工具,calendar模块也能实现需求,本质是通过日期类的内置星期列表匹配:

import calendar

def weekday_to_number(weekday_name):
    try:
        # 统一转为小写,避免大小写不匹配的问题
        target_day = weekday_name.lower()
        # 获取所有星期名称的小写列表,找到索引后加1得到序号
        day_index = [day.lower() for day in calendar.day_name].index(target_day)
        return day_index + 1
    except ValueError:
        return "请输入有效的英文星期名称"

为什么你的原代码报错?

你写的a = date.weekday(s_day)有两个核心问题:

  1. 没有导入date类:需要先写from datetime import date或者import datetime后用datetime.date调用。
  2. weekday()是实例方法,必须先创建一个日期对象才能调用,不能直接传入字符串。比如date(2024,1,1).weekday()是合法的,但date.weekday("Monday")不合法。

内容的提问来源于stack exchange,提问作者user2332713

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 03:30:01