博客被封了好长时间了,今天发现似乎解禁了,试一下现在的发帖系统。
# !/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)))