• Python:实现zellers congruence泽勒一致算法(附完整源码)


    Python:实现zellers congruence泽勒一致算法

    import argparse
    import datetime
    
    
    def zeller(date_input: str) -> str:
    
        # Days of the week for response
        days = {
            "0": "Sunday",
            "1": "Monday",
            "2": "Tuesday",
            "3": "Wednesday",
            "4": "Thursday",
            "5": "Friday",
            "6": "Saturday",
        }
    
        convert_datetime_days = {0: 1, 1: 2, 2: 3, 3: 4, 4: 5, 5: 6, 6: 0}
    
        # Validate
        if not 0 < len(date_input) < 11:
            raise ValueError("Must be 10 characters long")
    
        # Get month
        m: int = int(date_input[0] + date_input[1])
        # Validate
        if not 0 < m < 13:
            raise ValueError("Month must be between 1 - 12")
    
        sep_1: str = date_input[2]
        # Validate
        if sep_1 not in ["-", "/"]:
            raise ValueError("Date separator must be '-' or '/'")
    
        # Get day
        d: int = int(date_input[3] + date_input[4])
        # Validate
        if not 0 < d < 32:
            raise ValueError("Date must be between 1 - 31")
    
        # Get second separator
        sep_2: str = date_input[5]
        # Validate
        if sep_2 not in ["-", "/"]:
            raise ValueError("Date separator must be '-' or '/'")
    
        # Get year
        y: int = int(date_input[6] + date_input[7] + date_input[8] + date_input[9])
        # Arbitrary year range
        if not 45 < y < 8500:
            raise ValueError(
                "Year out of range. There has to be some sort of limit...right?"
            )
    
        # Get datetime obj for validation
        dt_ck = datetime.date(int(y), int(m), int(d))
    
        # Start math
        if m <= 2:
            y = y - 1
            m = m + 12
        # maths var
        c: int = int(str(y)[:2])
        k: int = int(str(y)[2:])
        t: int = int(2.6 * m - 5.39)
        u: int = int(c / 4)
        v: int = int(k / 4)
        x: int = int(d + k)
        z: int = int(t + u + v + x)
        w: int = int(z - (2 * c))
        f: int = round(w % 7)
        # End math
    
        # Validate math
        if f != convert_datetime_days[dt_ck.weekday()]:
            raise AssertionError("The date was evaluated incorrectly. Contact developer.")
    
        # Response
        response: str = f"Your date {date_input}, is a {days[str(f)]}!"
        return response
    
    
    if __name__ == "__main__":
        import doctest
    
        doctest.testmod()
        parser = argparse.ArgumentParser(
            description=(
                "Find out what day of the week nearly any date is or was. Enter "
                "date as a string in the mm-dd-yyyy or mm/dd/yyyy format"
            )
        )
        parser.add_argument(
            "date_input", type=str, help="Date as a string (mm-dd-yyyy or mm/dd/yyyy)"
        )
        args = parser.parse_args()
        zeller(args.date_input)
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89
    • 90
    • 91
    • 92
    • 93
    • 94
    • 95
    • 96
    • 97
    • 98
  • 相关阅读:
    cmka下切换使用不同版本的boost-未解决
    2022杭电多校 第6场 1008.Shinobu Loves Segment Tree 规律题
    typscript中逆变与协变
    hjr-大数据 关于分库分表
    Vue:v-on、v-bind、v-model、@click、:model用法以及区别(附代码实例)
    【Hive】drop table需注意外部表
    PAT 1124 Raffle for Weibo Followers
    SQLite事务处理
    PCN-224,PCN-224(H),CAS:1476810-88-4,金属有机骨架材料PCN-224(H)
    【计算机网络】TCP协议与UDP协议
  • 原文地址:https://blog.csdn.net/it_xiangqiang/article/details/126120158