## 【wk06_1012】迴圈 【inclass practice】 ```python n = 50 for i in range (1, n+1): if i %5 == 0: continue print(i) ``` 1 2 3 4 6 7 8 9 11 12 13 14 16 17 18 19 21 22 23 24 26 27 28 29 31 32 33 34 36 37 38 39 41 42 43 44 46 47 48 49 ```python a = 11 b = 57 maxnu = a * b for i in range(1,maxnu + 1): if ( i % a == 0 and i % b == 0 ): ans = i break print("最小公倍數:",ans) ``` 最小公倍數: 627 ```python num = 3 ans = 1 n = 0 while n <= 5: n = n+1 ans = ans* n print("num! = ",ans) ``` num! = 720 實作5: 一個正整數除了1和自己外,無法再被其他數整除,這個數就是質數。 請輸入一正整數,列出此數的所有正因數,並判斷使數字是否為質數 ```python a = 15 p = 1 counter = 0 while p <= a : if a % p == 0: counter = counter+1 p = p + 1 if counter > 2 : ans = "質數" else : ans = "合數" print(a,"質數","合數") ``` 15 質數 合數 {補充 while 練習} 猜數字遊戲:寫一個程式,隨機選擇一個1到100的數字,然後要求玩家通過輸入猜測該數字,直到猜對為止。使用while迴圈來實現,並在玩家猜對時結束遊戲。 import random 生成隨機數字 target_number = random.randint(1, 100) guess = None attempts = 0 while guess != target_number: guess = int(input("請猜一個1到100的數字:")) attempts += 1 if guess < target_number: print("太低了!再猜一次。") elif guess > target_number: print("太高了!再猜一次。") print(f"恭喜!你猜對了,答案是{target_number}。你總共猜了{attempts}次。") 使用者輸入:寫一個程式,要求使用者輸入一個整數,然後使用while迴圈,只有當輸入的數字是正整數時,才停止請求輸入。如果輸入不是正整數,則繼續要求輸入,直到收到正確的輸入。 user_input = None while not user_input: user_input = input("請輸入一個正整數:") if user_input.isdigit(): user_input = int(user_input) else: user_input = None print("請輸入正確的整數。") print(f"您輸入了正整數:{user_input}") 倒數計時器:寫一個程式,請求使用者輸入一個正整數作為倒數計時的秒數,然後使用while迴圈從輸入的秒數倒數到0。在每個秒數的間隔打印出剩餘的秒數。 import time countdown = int(input("請輸入倒數的秒數:")) while countdown > 0: print(countdown) # countdown -= 1 print("時間到!") 累積加法:寫一個程式,要求使用者不斷輸入整數,並使用while迴圈計算這些整數的總和。當使用者輸入0時,停止接受輸入並印出總和。 total = 0 while True: num = int(input("請輸入一個整數(輸入0結束):")) if num == 0: break total += num print(f"總和:{total}") 數字猜謎:寫一個程式,在1到10之間選擇一個隨機數字,然後要求玩家通過輸入猜測該數字。使用while迴圈來實現,並提供猜測是太高還是太低的提示,直到猜對為止。 import random 生成隨機數字 target_number = random.randint(1, 10) guess = None while guess != target_number: guess = int(input("請猜一個1到10的數字:")) if guess < target_number: print("太低了!再猜一次。") elif guess > target_number: print("太高了!再猜一次。") print(f"恭喜!你猜對了,答案是{target_number}。") ```python import random target_number = random.randint(1, 100) guess = None attempts = 0 while guess != target_number: guess = int(input("請猜一個1到100的數字:")) attempts += 1 if guess < target_number: print("太低了!再猜一次。") elif guess > target_number: print("太高了!再猜一次。") print(f"恭喜!你猜對了,答案是{target_number}。你總共猜了{attempts}次。") ``` ```python import random # 生成隨機數字 target_number = random.randint(1, 10) guess = None while guess != target_number: guess = int(input("請猜一個1到10的數字:")) if guess < target_number: print("太低了!再猜一次。") elif guess > target_number: print("太高了!再猜一次。") print(f"恭喜!你猜對了,答案是{target_number}。") ``` ```python import time countdown = int(input("請輸入倒數的秒數:")) while countdown > 0: print(countdown) ############# countdown -= 1 print("時間到!") ``` ```python total = 0 while True: num = int(input("請輸入一個整數(輸入0結束):")) if num == 0: break total += num print(f"總和:{total}") ``` ```python ``` ```python ! pip install requests beautifulsoup4 ``` ```python 【afterclass practice】 複習ch03、ch04 教學影音 lesson 7、9 ``` ```python pip install pygame ``` Defaulting to user installation because normal site-packages is not writeable Collecting pygame Downloading pygame-2.5.2-cp310-cp310-win_amd64.whl (10.8 MB) --------------------------------------- 10.8/10.8 MB 23.4 MB/s eta 0:00:00 Installing collected packages: pygame Successfully installed pygame-2.5.2 Note: you may need to restart the kernel to use updated packages. ```python import pygame # 初始化 pygame.init() # 设置窗口标题 screencaption=pygame.display.set_caption('Gobang') # 设置大小 screen=pygame.display.set_mode([350,285]) # 初始化字体 myfont=pygame.font.Font(None,30) textImage=myfont.render("Hello Pygame",True,[255,255,255]) screen.blit(textImage,(100,100)) # 棋子状态0为空 1为白色 2为黑色 status_list = {} for i in range(0, 15*18): status_list[i] = 0 #print(status_list) clock = pygame.time.Clock() # 0 是白棋走 1是黑棋走 flag = 0 # 将要绘制的棋子的位置 movex = 1 movey = 1 while True: clock.tick(30) # 绘制棋盘 screen.fill([255,255,255]) for i in range(0, 15): pygame.draw.line(screen,[0,0,0],[0,i*20],[280,i*20],2) for i in range(0, 15): pygame.draw.line(screen,[0,0,0],[i*20,0],[i*20,280],2) # 绘制棋子 for x in range(0, 15): for y in range(0, 15): if status_list[x*15 + y] == 1: pygame.draw.circle(screen,[255,0,0],[ 2 + y * 20,2 + x*20],10) elif status_list[x*15 + y] == 2: pygame.draw.circle(screen,[0,0,0],[ 2 + y * 20, 2 + x*20],10) # 判断是否获胜 # X轴的判定 if y < 11: # 白棋获胜 if status_list[x*15 + y] == 1 and status_list[x*15 + y + 1] == 1 and status_list[x*15 + y + 2] == 1 and status_list[x*15 + y + 3] == 1 and status_list[x*15 + y + 4] == 1: print("白棋胜利") # break # 黑棋获胜 if status_list[x*15 + y] == 2 and status_list[x*15 + y + 1] == 2 and status_list[x*15 + y + 2] == 2 and status_list[x*15 + y + 3] == 2 and status_list[x*15 + y + 4] == 2: print("黑棋胜利") # break # 判断是否获胜 # Y轴的判定 if x < 11: if status_list[x*15 + y] == 1 and status_list[(x+1)*15 + y] == 1 and status_list[(x+2)*15 + y] == 1 and status_list[(x+3)*15 + y] == 1 and status_list[(x+4)*15 + y] == 1: print("白棋胜利") # break if status_list[x*15 + y] == 2 and status_list[(x+1)*15 + y] == 2 and status_list[(x+2)*15 + y] == 2 and status_list[(x+3)*15 + y] == 2 and status_list[(x+4)*15 + y] == 2: print("黑棋胜利") # break # 判断是否获胜 # 斜着判断 正对角线 if status_list[x*15 + y] == 1 and status_list[(x+1)*15 + (y+1)] == 1 and status_list[(x+2)*15 + (y+2)] == 1 and status_list[(x+3)*15 + (y+3)] == 1 and status_list[(x+4)*15 + (y+4)] == 1: print("白棋胜利") # break if status_list[x*15 + y] == 2 and status_list[(x+1)*15 + (y+1)] == 2 and status_list[(x+2)*15 + (y+2)] == 2 and status_list[(x+3)*15 + (y+3)] == 2 and status_list[(x+4)*15 + (y+4)] == 2: print("黑棋胜利") # break # 判断是否获胜 # 斜着判断 反对角线 if status_list[x*15 + y] == 1 and status_list[(x+1)*15 + (y-1)] == 1 and status_list[(x+2)*15 + (y-2)] == 1 and status_list[(x+3)*15 + (y-3)] == 1 and status_list[(x+4)*15 + (y-4)] == 1: print("白棋胜利") # break if status_list[x*15 + y] == 2 and status_list[(x+1)*15 + (y-1)] == 2 and status_list[(x+2)*15 + (y-2)] == 2 and status_list[(x+3)*15 + (y-3)] == 2 and status_list[(x+4)*15 + (y-4)] == 2: print("黑棋胜利") # break # 绘制落棋位置 pygame.draw.circle(screen,[0,0,0],[ 2 + movex*20, 2 + movey*20],10,3) # 绘制文字 显示到谁落棋子 if flag == 0: textImage=myfont.render("White",True,[255,0,0]) else: textImage=myfont.render("Black",True,[0,0,255]) screen.blit(textImage,(290,10)) # 判断事件 for event in pygame.event.get(): # 退出事件 if event.type==pygame.QUIT: pygame.quit() quit() # 键盘事件 if event.type == pygame.KEYDOWN: if event.key == pygame.K_LEFT: if movex > 0: movex = movex - 1 if event.key == pygame.K_RIGHT: if movex < 14: movex = movex + 1 if event.key == pygame.K_UP: if movey > 0: movey = movey - 1 if event.key == pygame.K_DOWN: if movey < 14: movey = movey + 1 if event.key == pygame.K_SPACE: if flag == 0: if status_list[movey * 15 + movex] == 0: status_list[movey * 15 + movex] = 1 flag = 1 elif flag == 1: if status_list[movey * 15 + movex] == 0: status_list[movey * 15 + movex] = 2 flag = 0 # 刷新页面 pygame.display.flip() print("Done!") ``` pygame 2.5.2 (SDL 2.28.3, Python 3.10.9) Hello from the pygame community. https://www.pygame.org/contribute.html