python经典百题之判断星期几

题目:请输入星期几的第一个字母来判断一下是星期几,如果第一个字母一样,则继续判断第二个字母

程序分析

我们需要编写一个程序,接受用户输入的星期的第一个字母,然后判断是星期几。如果第一个字母一样,则继续判断第二个字母。

方法1: 使用字典

def get_weekday_first_letter(letter):
    weekdays = {
        'm': 'Monday',
        't': {'u': 'Tuesday', 'h': 'Thursday'},
        'w': 'Wednesday',
        'f': 'Friday',
        's': {'a': 'Saturday', 'u': 'Sunday'}
    }

    if letter.lower() in weekdays:
        if isinstance(weekdays[letter.lower()], dict):
            second_letter = input("Enter the second letter: ").lower()
            return weekdays[letter.lower()][second_letter]
        else:
            return weekdays[letter.lower()]
    else:
        return "Invalid input"

def main():
    first_letter = input("Enter the first letter of the weekday: ").lower()
    result = get_weekday_first_letter(first_letter)
    print("The day is:", result)

if __name__ == "__main__":
    main()

解题思路:

  • 使用字典存储星期与对应的首字母,如果输入的首字母存在于字典中,则判断是否需要进一步输入第二个字母。

优点:

  • 实现简单,直观易懂。

缺点:

  • 只能处理首字母匹配的情况,不够灵活。

方法2: 使用多层if-elif-else

def get_weekday_first_letter(first_letter, second_letter=None):
    first_letter = first_letter.lower()
    if first_letter == 'm':
        return "Monday"
    elif first_letter == 't':
        if second_letter == 'u':
            return "Tuesday"
        elif second_letter == 'h':
            return "Thursday"
    elif first_letter == 'w':
        return "Wednesday"
    elif first_letter == 'f':
        return "Friday"
    elif first_letter == 's':
        if second_letter == 'a':
            return "Saturday"
        elif second_letter == 'u':
            return "Sunday"
    else:
        return "Invalid input"

def main():
    first_letter = input("Enter the first letter of the weekday: ").lower()
    if first_letter == 't' or first_letter == 's':
        second_letter = input("Enter the second letter: ").lower()
        result = get_weekday_first_letter(first_letter, second_letter)
    else:
        result = get_weekday_first_letter(first_letter)
    print("The day is:", result)

if __name__ == "__main__":
    main()

解题思路:

  • 使用多层if-elif-else语句根据第一个字母和可能的第二个字母进行判断。

优点:

  • 实现简单,逻辑清晰。

缺点:

  • 可能会导致代码嵌套层次较深,不够优雅。

方法3: 使用列表和索引

def get_weekday_first_letter(first_letter, second_letter=None):
    weekdays = ['Monday', ('Tuesday', 'Thursday'), 'Wednesday', 'Friday', ('Saturday', 'Sunday')]

    first_letter = first_letter.lower()
    index = ord(first_letter) - ord('a')

    if index >= 0 and index < len(weekdays):
        weekday = weekdays[index]

        if isinstance(weekday, tuple) and second_letter:
            second_letter = second_letter.lower()
            if second_letter == 'a':
                return weekday[0]
            elif second_letter == 'u':
                return weekday[1]
        elif not isinstance(weekday, tuple):
            return weekday

    return "Invalid input"

def main():
    first_letter = input("Enter the first letter of the weekday: ").lower()
    if first_letter == 't' or first_letter == 's':
        second_letter = input("Enter the second letter: ").lower()
        result = get_weekday_first_letter(first_letter, second_letter)
    else:
        result = get_weekday_first_letter(first_letter)
    print("The day is:", result)

if __name__ == "__main__":
    main()

解题思路:

  • 使用列表存储星期与对应的首字母,根据输入的首字母找到对应的位置,再判断是否需要进一步输入第二个字母。

优点:

  • 使用了列表,避免了多层if-elif-else的嵌套。

缺点:

  • 需要进行字母到索引的转换,可能稍复杂。

方法总结及推荐

  • 推荐方法: 方法1使用字典,实现简单且直观。它可以灵活处理首字母匹配,且代码结构清晰。

  • 适用场景:

    • 对于这种首字母匹配的情况,推荐使用方法1。它简洁直观,易于维护。
    • 方法2也可用,但在字母匹配较多时,可能会导致代码嵌套过深,不够优雅。
    • 方法3使用了列表,避免了多层if-elif-else的嵌套,但需要进行字母到索引的转换,稍微复杂一些。

综上所述,方法1(使用字典)是最推荐的方法,简洁直观,易于理解和维护,适用于这种首字母匹配的情况。

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

忧伤的玩不起

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值