From 5530a7fe9d90c7f3a9caec0019aa8e8c6f1aeb16 Mon Sep 17 00:00:00 2001 From: sairate Date: Tue, 16 Jul 2024 09:11:48 +0800 Subject: [PATCH] Signed-off-by: sairate --- 斐波那契数列.py | 13 ++++--- 斐波那契数列正向.py | 12 ++++++ 游戏.py | 92 +++++++++++++++++++++++++++++++++++++++++++++ 质数筛.py | 6 ++- 4 files changed, 115 insertions(+), 8 deletions(-) create mode 100644 斐波那契数列正向.py create mode 100644 游戏.py diff --git a/斐波那契数列.py b/斐波那契数列.py index 7f9ae00..c79f7c5 100644 --- a/斐波那契数列.py +++ b/斐波那契数列.py @@ -1,16 +1,17 @@ -# 1 1 2 3 5 -list=[] -for i in range(100000): - list.append(0) +# 1 1 2 3 5 8 13 def feibo(n): if n==1 or n==2: return 1 if list[n]!=0: return list[n] else: - a=feibo(n-1)+feibo(n-2) + a=(feibo(n-1)+feibo(n-2))%(1000000007) list[n]=a return a + n=int(input()) + +list=[0]*(n+1) + b=feibo(n) -print(b%(10**9+7)) \ No newline at end of file +print(b) \ No newline at end of file diff --git a/斐波那契数列正向.py b/斐波那契数列正向.py new file mode 100644 index 0000000..9f7c582 --- /dev/null +++ b/斐波那契数列正向.py @@ -0,0 +1,12 @@ +n=int(input()) +one_num=1 +two_num=1 +for i in range(3,n+1): + new_num=one_num+two_num + two_num=one_num + if new_num>1000000007: + one_num=new_num%(1000000007) + else: + one_num = new_num + +print(one_num) \ No newline at end of file diff --git a/游戏.py b/游戏.py new file mode 100644 index 0000000..0d1f36b --- /dev/null +++ b/游戏.py @@ -0,0 +1,92 @@ +import sys +import pygame as py +import time + +#初始化 +py.init() +py.display.init() + +#创建屏幕 +a=py.display.set_mode((400,320)) +running = True +#设置小球x、y坐标 +ball_x = 200 +ball_y = 240 +#设置小球x、y坐标速度 +ball_x_speed = 2 +ball_y_speed = -3 +# 显示小球 +ball = py.draw.circle(a, 'blue', (ball_x, ball_y), 10) +#创建球拍 +qp = py.Rect(160,270,80,20) +#设置分数 +poins = 0 +#砖块列表 +zk_list = [] +#把砖块添加砖块列表 +for j in range(3): + for i in range(5): + r = py.Rect(i*78+14,j*45+35,60,37) + zk_list.append(r) +while running: + # a的背景设为(238,238,238) + a.fill((238,238,238)) + #判断退出事件 + for e in py.event.get(): + if e.type == py.QUIT: + running = False + #球拍的移动 + keys = py.key.get_pressed()#py.key.get_pressed() : 所有按钮是否按下的逻辑值以序列的形式的变量 + if keys[py.K_LEFT] and qp.x > 0 :#py.K_LEFT : 左方向键 + qp.x -= 5 + if keys[py.K_RIGHT] and qp.x < 320 :#py.K_RIGHT : 右方向键 + qp.x += 5 + #球碰到边界的反弹 + if ball_x > 390 or ball_x < 10: + ball_x_speed = - ball_x_speed + if ball_y < 10: + ball_y_speed = - ball_y_speed + #球碰到球拍的反弹 + if ball.colliderect(qp):#判断球是否碰到球拍 + ball_y_speed = -ball_y_speed + #球的移动 + ball_x = ball_x + ball_x_speed + ball_y = ball_y + ball_y_speed + #球打碎砖块 + for r in zk_list: + if ball.colliderect(r):#判断球是否碰到砖块 + ball_y_speed = -ball_y_speed + zk_list.remove(r) + poins += 1 + # 球碰到下边界 + if ball_y > 310: + # 终断循环 + running = False + # 球打完了砖块 + if not zk_list : + # 创建字体(完美) + text = py.font.Font(None, 50).render('prefect!!', True, (0, 0, 0)) + # 显示字体(完美) + a.blit(text, (150, 100)) + time.sleep(5) + #终断循环 + running = False + # 画出所有砖块 + for zk in zk_list: + py.draw.rect(a, 'red', zk) + # 显示球拍 + py.draw.rect(a, (0, 0, 0), rect=qp) + # 显示小球 + ball = py.draw.circle(a, 'blue', (ball_x, ball_y), 10) + # 创建字体(得分) + text = py.font.Font(None, 30).render(f'poins:{poins}', True, (0, 0, 0)) + # 显示字体(得分) + a.blit(text, (10, 10)) + #更新显示 + py.display.flip() + # 把帧率设为100(一帧为每秒更新1篇画面) + py.time.Clock().tick(50) +#pygame初始化 +py.quit() +#结束系统进程 +sys.exit() \ No newline at end of file diff --git a/质数筛.py b/质数筛.py index 3b05527..1bff3c8 100644 --- a/质数筛.py +++ b/质数筛.py @@ -7,7 +7,9 @@ def sieve_of_eratosthenes(n): # 更新所有 p 的倍数,从 p*p 开始标记为 False for i in range(p * p, n + 1, p): primes[i] = False - p += 1 + p+=1 + while primes[p]==0: + p+=1 # 收集所有质数 prime_numbers = [p for p in range(2, n + 1) if primes[p]] @@ -15,5 +17,5 @@ def sieve_of_eratosthenes(n): # 测试算法 -n = 50 +n = 10000 print(f"小于等于 {n} 的所有质数: {sieve_of_eratosthenes(n)}") \ No newline at end of file