文章目录- 1. 求素数
- 2. 打印菱形
- 3. 打印杨辉三角
- 4. 打印斐波那契数列
- 5. 求水仙花数
- 6. 模拟双色球随机选号
1. 求素数
代码语言:javascript复制from datetime import datetime
# 求多少以内的素数
n = 100000
count = 0
start = datetime.now()
for i in range(2, n 1):
for j in range(2, i):
if i % j == 0: # 是合数
break
else: # 是素数
count = 1
# print(i, end=" ")
delta = (datetime.now() - start).total_seconds()
print(count, "n用时:{}s".format(delta))
求10万以内的素数,有9592个,用时49.789252s。
素数优化
代码语言:javascript复制from datetime import datetime
# 求多少以内的素数
n = 100000
count = 1 # 2是素数
start = datetime.now()
for i in range(3, n 1, 2): # 大于2的偶数不可能是素数了
for j in range(3, int(i ** 0.5) 1, 2):
if i % j == 0: # 是合数
break
else: # 是素数
count = 1
# print(i, end=" ")
delta = (datetime.now() - start).total_seconds()
print(count, "n用时:{}s".format(delta))
求10万以内的素数,有9592个,用时0.162093s。
通过对比可看出,通过素数优化,大大提高了算法的效率。
2. 打印菱形
观察规律,找对称性。
代码语言:javascript复制n = int(input("打印几行:"))
e = n // 2
for i in range(-e, n-e):
print(" " * abs(i) "*" * (n - 2 * abs(i)))
结果如下:
3. 打印杨辉三角
代码语言:javascript复制row = int(input('打印杨辉三角前几行:'))
def print_triangle(x): # 打印几行
tri = [1] # 当前行所有元素
pre = [1] # 上一行所有元素
n = 1
while n <= x:
yield tri # yield生成器函数 返回
for i in range(1, len(pre)):
# 中间的各个元素值 = 上一行相应位置的值 与前一位置元素的值
tri[i] = pre[i-1] pre[i]
# 每次计算完列表tri中的元素之后,通过append(1)来添加末尾的1
tri.append(1)
# 得到后,传给上行
pre = tri[:]
n = 1
trianges = print_triangle(row) # 传入参数
for item in trianges:
print(item)
运行结果如下:
打印杨辉三角前几行:5
[1]
[1, 1]
[1, 2, 1]
[1, 3, 3, 1]
[1, 4, 6, 4, 1]
结果如下:
4. 打印斐波那契数列
代码语言:javascript复制def fibonacii(n):
if n <= 1: # 0 1
return n
else:
return (fibonacii(n - 1) fibonacii(n - 2))
x = int(input("输出前几项?: "))
if x <= 0:
print("请输入输入正数!")
else:
print("斐波那契数列前{}项:".format(x), end=" ")
for i in range(1, x 1):
print(fibonacii(i), end=" ")
5. 求水仙花数
水仙花数是指一个 3 位数,它的每个位上的数字的 3次幂之和等于它本身(例如:1^3 5^3 3^3 = 153)。
代码语言:javascript复制print("水仙花数:", end=" ")
for i in range(100, 1000): # 三位数
if i == sum([int(x) ** 3 for x in str(i)]): # 求水仙花数
print(i, end=" ")
else:
continue
结果如下:
6. 模拟双色球随机选号
代码语言:javascript复制import random
num = int(input("请输入注数:"))
print("*" * 16 " 双色球 {} 注 ".format(num) "*" * 16)
for i in range(num):
flag = True
red_ball_list = []
while flag:
# 红球 1-33中选
red_ball = random.randint(1, 33)
if red_ball not in red_ball_list:
# 个位数的 前面加个0 变字符串
if red_ball < 10:
red_ball = "0{}".format(red_ball)
red_ball_list.append(red_ball)
else:
red_ball_list.append(str(red_ball))
# 选出6个不重复的红球号码
if len(red_ball_list) == 6:
flag = False
# 蓝球 1-16中选
blue_ball = random.randint(1, 16)
if blue_ball < 10:
blue_ball = "0{}".format(blue_ball)
else:
blue_ball = str(blue_ball)
print("红球:" " ".join(red_ball_list, ) " 蓝球:" blue_ball)
print("*" * 45)
作者:叶庭云 CSDN:https://blog.csdn.net/fyfugoyfa 本文仅用于交流学习,未经作者允许,禁止转载,更勿做其他用途,违者必究。