Python实现输入数字月份输出对应英文月份缩写

代码目的

根据用户输入的月份数(1到12),返回对应月份的简写形式。
例如,1对应"Jan",2对应"Feb"

设计思路

  • 定义月份字符串
months = "JanFebMarAprMayJunJulAugSepOctNovDec"

这里将所有月份的前三字母缩写拼接成一个长字符串。

  • 输入月份数
n = input("请输入月份数(1-12):")

用户输入月份数,input函数会返回一个字符串类型的值。

  • 计算位置
pos = (int(n) - 1) * 3

将输入的月份数转换为整数,并计算出该月份缩写在months字符串中的起始位置。因为每个缩写占3个字符,所以位置计算方式为(月份数 - 1) * 3。

  • 提取月份简写
monthAbbrev = months[pos:pos+3]

根据计算出的起始位置,从months字符串中提取3个字符,即对应月份的缩写。

  • 打印结果
print("月份简写是:" + monthAbbrev)

代码如下

months = "JanFebMarAprMayJunJulAugSepOctNovDec"
n = input("请输入月份数(1-12):")
pos = (int(n) - 1) * 3
monthAbbrev = months[pos:pos+3]
print("月份简写是:" + monthAbbrev )

为了确保代码更健壮,可以添加一些输入验证。例如,检查输入是否为有效的数字以及是否在1到12之间。优化版如下:

months = "JanFebMarAprMayJunJulAugSepOctNovDec"

def get_month_abbreviation():
    try:
        n = int(input("请输入月份数(1-12):"))
        if 1 <= n <= 12:
            pos = (n - 1) * 3
            monthAbbrev = months[pos:pos+3]
            print("月份简写是:" + monthAbbrev)
        else:
            print("请输入1到12之间的数字。")
    except ValueError:
        print("请输入有效的数字。")

get_month_abbreviation()

在这个改进版中增加了函数 get_month_abbreviation()

  1. 使用try-except块捕获非整数输入,以避免程序崩溃。
  2. 将用户输入的字符串转换为整数 n。
  3. 检查输入的数字是否在1到12之间,并给予相应提示。
  4. 计算位置 pos 并从 months 字符串中提取对应的月份简写。
  5. 输出结果或者提示错误信息。

技术细节-理解字符串切片

上述的第四行代码中的 pos:pos+3 是 Python 中字符串切片的方式,用于从字符串中提取子字符串。

假设 months 字符串是 “JanFebMarAprMayJunJulAugSepOctNovDec”,这是一个包含12个月份的简写,每个简写长度为3个字符。

例子

用户输入1(对应1月):
输入 n = 1
计算位置 pos = (int(n) - 1) * 3 = (1 - 1) * 3 = 0
切片 months[0:3] 提取出 Jan

用户输入2(对应2月):
输入 n = 2
计算位置 pos = (int(n) - 1) * 3 = (2 - 1) * 3 = 3
切片 months[3:6] 提取出 Feb

切片操作

monthAbbrev = months[pos:pos+3]

在这里:

  • pos 是起始位置,表示我们要从哪里开始提取子字符串。
  • pos+3 是结束位置(但不包括该位置),表示我们提取到哪里结束。

由于每个月份简写占用3个字符,因此我们从 pos 开始,提取接下来的3个字符。

图示

如果我们用 months 字符串和位置来说明:

索引: 0 1 2 3 4 5 6 7 8 9 10…
字符: J a n F e b M a r A p r …

  • 对于1月,pos = 0,pos+3 = 3,切片 months[0:3] 提取 Jan
  • 对于2月,pos = 3,pos+3 = 6,切片 months[3:6] 提取 Feb

    这样,通过计算位置并使用切片操作,我们可以准确地从字符串中提取出对应的月份简写。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值