似乎解禁了,发几个Python小程序试下

博客被封了好长时间了,今天发现似乎解禁了,试一下现在的发帖系统。

# !/usr/bin/env python3
# -*- coding:utf-8 -*-
# author:怦然☆动

# 导入模块
from decimal import *
import math


def tower(x = 1, n = 5):
    """
     把从x开始的整数排列成n行塔形
     :param x:
     :param n:
     :return:
     """
    while x <= n:
        i = x
        for y in range(x):
            print(i, end=" ")
            i = i + n - y - 1
        print()
        x += 1


def prime(m = 2, n = 1000):
    """
     筛选法计算质数,据说是效率最高的算法,I7 8750H 计算 10,000,000 以内的质数只需要不到 6 秒
     :param m: 输出范围的下限
     :param n: 输出范围的上限
     :return: 从 2 到上限范围内的所有质数
     """
    mark = [True] * (n +1)
    for i in range(2, int(math.sqrt(n)) + 1):
        if mark[i] == True:
            j = i
            k = j
            while j * k < n + 1:
                mark[j * k] = False
                k += 1
    result = []
    sums = 0
    for i in range(m, n +1):
        if mark[i] == True:
            print(i, end= "\t")
            result.append(i)
            sums += 1
            if sums % 20 == 0:
                print("")
    print("")
    return result


def reverseNumber(n = -123):
    """
     将数字除符号外倒序排列,比如“123”转换为“321”,“-123”转化为“-321”
     :param n:
     :return:
     """
    if n < 0:
        f = -1
    else:
        f = 1
    s = str(n * f)
    s = s[::-1]  # name[x:y:z]中x表示起始位置(默认为0),y终止位置的前一个(默认为len-1),z步长(默认为1)
    n = int(s) * f
    return n


def convertChar(text = ""):
    """
     1、所有元音字母输出小写
     2、所有辅音字母输出大写
     3、其他字符输出“*”
     :param text: 需要转换的字符串
     :return: 转换后的字符串
     """
    char_List = [chr(x) for x in range(ord("A"), ord("Z")+1)]
    char_List.append(" ")
    vowel = ["A", "E", "I", "O", "U"]
    text = text.upper()
    conv_List = []
    for c in text:
        if c not in char_List:
            conv_List.append("*")
        elif c in vowel:
            conv_List.append(c.lower())
        else:
            conv_List.append(c)
    result = "".join(conv_List)
    return result


def str_wday(wday= 0):
    """
     返回中文星期几
     :param wday: [0, 6]之间的一个数字
     :return:
     """
    d = {
        0: "星期日",
        1: "星期一",
        2: "星期二",
        3: "星期三",
        4: "星期四",
        5: "星期五",
        6: "星期六",
   }
    return d.get(wday)


def robbits(month = 3, ini_number = 1, adult = 3):
    """
     有 ini_number 对小兔子,出生后第 adult 个月起每个月都生一对兔子,
     小兔子长到第 adult 个月后每个月又生一对兔子,
     假如兔子都不死,问 month 个月内,每个月的兔子总数为多少对?
     :param robbit_Number[adult]: 每个月兔子总数的序列表
     :param month: 需要计算多少个月的兔子数目
     :param ini_number: 初始拥有的小兔子数目
     :param adult: 成年时间,缺省为第3个月即成年可以生小兔子
     :return: 返回每个月的总兔子数目列表
     """
    robbit_Number = [ini_number for x in range(0, adult - 1)]
    for x in range(adult - 1, month):
        robbit_Number.append(robbit_Number[x - 1] + robbit_Number[x - adult])
    return robbit_Number


def certID(idStr = "66666619880808008"):
    """
     根据身份证前面17位计算身份证第18位验证码
     :param idStr: 字符串方式的身份证号码前17位
     :return certChar: 完整的身份证号码
     """
    factor = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2]
    last = ["1", "0", "X", "9", "8", "7", "6", "5", "4", "3", "2"]
    certChar = ""
    totles = 0
    lens = len(idStr)
    if lens == 17:
        for i in range(lens):
            totles += eval(idStr[i]) * factor[i]
        certChar = last[totles % 11]
    certChar = idStr + certChar
    return certChar


def gongYinshu(m, n):
    """
     计算最大公约数
     :param m: 整数
     :param n: 整数
     :return: 最大公约数
     """
    c = m % n
    while (c):
        m = n
        n = c
        c = m % n
    return n


def gongBeishu(m, n):
    """
     计算最小公倍数
     :param m: 整数
     :param n: 整数
     :return: 最小公倍数
     """
    return (int(m * n / gongYinshu(m, n)))


def bbp(n):
    """
     计算 n 位精度的圆周率
     :param n: 需要计算的小数位数
     :return: n 位 Pi
     """
    getcontext().prec = n
    my_Pi = Decimal(0)
    k = 0
    while k <= n:
        my_Pi += (Decimal(1) / (16 ** k)
                  ) * ((Decimal(4) / (8 * k + 1)
                        ) - (Decimal(2) / (8 * k + 4)
                             ) - (Decimal(1) / (8 * k + 5)
                                  ) - (Decimal(1) / (8 * k + 6)
                                       )
                       )
        k += 1
    return my_Pi


if __name__ == "__main__":
    tower(1, 9)
    n = 1234
    m = 666
    prime()
    print(f"{n}的颠倒数字, {reverseNumber(n)}")
    text = "My car Goes very FAST!"
    print(convertChar(text))
    print(f"19个月内每月兔子总数: {robbits(19, 2)}")
    print("certID:" + certID("66666619880808008"))
    print(f"{n}和{m}的最大公因数是:{gongYinshu(n, m)}")
    print(f"{n}和{m}的最小公倍数是:{gongBeishu(n, m)}")
    print("Pi = " + str(bbp(n)))

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值