1. 求素数
fromdatetimeimportdatetime# 求多少以内的素数n=100000count=0start=datetime.now() foriinrange(2, n+1): forjinrange(2, i): ifi%j==0: # 是合数breakelse: # 是素数count+=1# print(i, end=" ")delta= (datetime.now() -start).total_seconds() print(count, "\n用时:{}s".format(delta))
求10万以内的素数,有9592个,用时49.789252s。
素数优化
fromdatetimeimportdatetime# 求多少以内的素数n=100000count=1# 2是素数start=datetime.now() foriinrange(3, n+1, 2): # 大于2的偶数不可能是素数了forjinrange(3, int(i**0.5) +1, 2): ifi%j==0: # 是合数breakelse: # 是素数count+=1# print(i, end=" ")delta= (datetime.now() -start).total_seconds() print(count, "\n用时:{}s".format(delta))
求10万以内的素数,有9592个,用时0.162093s。
通过对比可看出,通过素数优化,大大提高了算法的效率。
2. 打印菱形
观察规律,找对称性。
n=int(input("打印几行:")) e=n//2foriinrange(-e, n-e): print(" "*abs(i) +"*"* (n-2*abs(i)))
结果如下:
3. 打印杨辉三角
row=int(input('打印杨辉三角前几行:')) defprint_triangle(x): # 打印几行tri= [1] # 当前行所有元素pre= [1] # 上一行所有元素n=1whilen<=x: yieldtri# yield生成器函数 返回foriinrange(1, len(pre)): # 中间的各个元素值 = 上一行相应位置的值 + 与前一位置元素的值tri[i] =pre[i-1] +pre[i] # 每次计算完列表tri中的元素之后,通过append(1)来添加末尾的1tri.append(1) # 得到后,传给上行pre=tri[:] n+=1trianges=print_triangle(row) # 传入参数foritemintrianges: print(item) 运行结果如下:打印杨辉三角前几行:5[1] [1, 1] [1, 2, 1] [1, 3, 3, 1] [1, 4, 6, 4, 1]
结果如下:
4. 打印斐波那契数列
deffibonacii(n): ifn<=1: # 0 1returnnelse: return (fibonacii(n-1) +fibonacii(n-2)) x=int(input("输出前几项?: ")) ifx<=0: print("请输入输入正数!") else: print("斐波那契数列前{}项:".format(x), end=" ") foriinrange(1, x+1): print(fibonacii(i), end=" ")
5. 求水仙花数
水仙花数是指一个 3 位数,它的每个位上的数字的 3次幂之和等于它本身(例如:1^3 + 5^3 + 3^3 = 153)。
print("水仙花数:", end=" ") foriinrange(100, 1000): # 三位数ifi==sum([int(x) **3forxinstr(i)]): # 求水仙花数print(i, end=" ") else: continue
结果如下:
6. 模拟双色球随机选号
importrandomnum=int(input("请输入注数:")) print("*"*16+" 双色球 {} 注 ".format(num) +"*"*16) foriinrange(num): flag=Truered_ball_list= [] whileflag: # 红球 1-33中选red_ball=random.randint(1, 33) ifred_ballnotinred_ball_list: # 个位数的 前面加个0 变字符串ifred_ball<10: red_ball="0{}".format(red_ball) red_ball_list.append(red_ball) else: red_ball_list.append(str(red_ball)) # 选出6个不重复的红球号码iflen(red_ball_list) ==6: flag=False# 蓝球 1-16中选blue_ball=random.randint(1, 16) ifblue_ball<10: blue_ball="0{}".format(blue_ball) else: blue_ball=str(blue_ball) print("红球:"+" ".join(red_ball_list, ) +" 蓝球:"+blue_ball) print("*"*45)