似乎解禁了,發幾個Python小程式試下
阿新 • • 發佈:2019-01-13
部落格被封了好長時間了,今天發現似乎解禁了,試一下現在的發帖系統。
# !/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 8350U 計算 10,000,000 以內的質數只需要不到 15 秒 :param m: 輸出範圍的下限 :param n: 輸出範圍的上限 :return: 從 2 到上限範圍內的所有質數 """ mark = [True] * (n +1) for i in range(2, int(math.sqrt(n)) + 1): 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)))