日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python之4个小作业

發布時間:2025/3/8 python 13 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python之4个小作业 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

第一道小題

"""1.雙人版2048游戲"""import random,itertools,pygame,sys pygame.init() screencaption=pygame.display.set_caption('2048小游戲') screen=pygame.display.set_mode([1320,900]) screen.fill([230,230,230])class Gamefield:def __init__(self,win_value=2048):self.win_value = win_valueself.best_score1 = 0self.score1 = 0self.best_score2 = 0self.score2 = 0#畫圖形界面(此函數值負責構建圖形界面窗口,沒有將值繪畫在界面上)def init_screen(self):screen.fill([230, 230, 230])for i in range(4):for j in range(8):left = 150 * j + 10 * j + 15top = 150 * i + 10 * i + 110if j > 3:left += 20pygame.draw.rect(screen, [120, 120, 120], [left, top, 150, 150], 0) #畫長寬都是150的方塊self.draw_number('歷史最高:'+str(self.best_score1),330,25,30,(0,120,120))self.draw_number('當前分數:' + str(self.score1), 330, 60, 30, (0, 120, 120))self.draw_number('歷史最高:' + str(self.best_score2), 990, 25, 30, (0, 120, 120))self.draw_number('當前分數:' + str(self.score2), 990, 60, 30, (0, 120, 120))game.draw_number('移動:上(w) 下(s) 左(a) 右(d) 重置(r)', 330, 780, 30, (0, 0, 0))game.draw_number('移動:上(↑) 下(↓) 左(←) 右(→) 重置(r)', 990, 780, 30, (0, 0, 0))pygame.draw.line(screen, (120,120,120), [0, 100], [1320, 100], 5)pygame.draw.line(screen, (120, 120, 120), [0, 750], [1320, 750], 5)pygame.draw.line(screen, (120, 120, 120), [2.5, 100], [2.5, 750], 5)pygame.draw.line(screen, (120, 120, 120), [660, 100], [660, 750], 5)pygame.draw.line(screen, (120, 120, 120), [1317.5, 100], [1317.5, 750], 5)#把字符數字畫到界面對應位置def draw_number(self,str,left,top,font=60,color=(0, 0, 128)):# 創建一個Font對象fontObj = pygame.font.SysFont('arplukaitwmbe', font)# fontObj.render(字符串,True或False(指定是否要抗鋸齒),字體顏色,[背景底色])的返回一個Surface對象textSurfaceObj = fontObj.render(str, True, color)# Surface對象的get_rect()方法,從Surface對象創建一個Rect對象,這個Rect對象可以計算出文本的正確坐標textRectObj = textSurfaceObj.get_rect()# 將Rect對象的中心設置為(left,top)textRectObj.center = (left,top)# 在屏幕繪制文本screen.blit(textSurfaceObj, textRectObj)#每次移動后,重畫界面def init_ui(self,flag,li1,li2):self.init_screen() #調用函數畫圖形界面if flag == 1:if ' ' in list(itertools.chain(*game_list1)): #flag = 1表示第一個列表移動,如果列表還有空位置,則新產生一個數,沒有則不產生self.create_num1()if flag == 2:if ' ' in list(itertools.chain(*game_list2)): #flag = 2表示第二個列表移動,如果列表還有空位置,則新產生一個數,沒有則不產生self.create_num2()# 把列表里的數值畫進圖形界面里for i in range(4):for j in range(4):left = 90 + 160 * jtop = 195 + 160 * iself.draw_number(str(li1[i][j]), left, top) # 畫列表1里面的值self.draw_number(str(li2[i][j]), left + 660, top) # 畫列表2里面的值# 給空列表里產生兩個初始值,并畫到界面def reset(self):if self.score1 > self.best_score1:self.best_score1 = self.score1if self.score2 > self.best_score2:self.best_score2 = self.score2self.score1 = 0self.score2 = 0for i in range(2):self.create_num1()self.create_num2()self.init_ui(0, game_list1, game_list2) #游戲初始化的時候,沒有移動列表,因此設flag為0,就不用產生新的數值了# 1移動一次就出現一個新的數字,game_list1def create_num1(self):while True:i = random.randint(0, 3)j = random.randint(0, 3)if game_list1[i][j] == ' ':game_list1[i][j] = random.choice([2, 2, 2, 4])breakelse:continue# 2移動一次就出現一個新的數字,game_list2def create_num2(self):while True:i = random.randint(0, 3)j = random.randint(0, 3)if game_list2[i][j] == ' ':game_list2[i][j] = random.choice([2, 2, 2, 4])breakelse:continue# 矩陣反轉def invert(self,li):return [i[::-1] for i in li]# 矩陣轉置def transpose(self,li):return [list(i) for i in zip(*li)]# 判斷能否左移,右移,上移,下移def is_moving_left(self,li):for i in range(4):for j in range(3):if li[i][j] == ' ' and li[i][j + 1] != ' ':return Trueelse:if li[i][j] != ' ' and li[i][j] == li[i][j + 1]:return Trueelse:return Falsedef is_moving_right(self,li):li = self.invert(li)return self.is_moving_left(li)def is_moving_up(self,li):li = self.transpose(li)return self.is_moving_left(li)def is_moving_down(self,li):li = self.transpose(li)li = self.invert(li)return self.is_moving_left(li)# 進行左移,右移,上移,下移,flag的值表示移動的是第1個或第2個數值列表def move_left(self,flag,li):new_li = []for row in li:row_list = sorted(row, key=lambda x: 1 if x == ' ' else 0)self.add_number(flag,row_list)new_li.append(row_list)return new_lidef move_right(self,flag,li):li = self.invert(li)li = self.move_left(flag,li)li = self.invert(li)return lidef move_up(self,flag,li):li = self.transpose(li)li = self.move_left(flag,li)li = self.transpose(li)return lidef move_down(self,flag,li):li = self.transpose(li)li = self.invert(li)li = self.move_left(flag,li)li = self.transpose(li)return li[::-1]#移動之后消數字:在移動方向上把兩個相等的數字加起來def add_number(self,flag,row):for j in range(3):if row[j] != ' ' and row[j] == row[j + 1]:row[j] *= 2if flag == 1:self.score1 += row[j]else:self.score2 += row[j]row[j + 1] = ' '#判斷是否有數值達到2048def is_get_2048(self,li):li = list(itertools.chain(*li))if max([i for i in li if i != ' ']) >= 2048:return Trueelse:return False#判斷是否能繼續移動def is_move(self,li):return any((self.is_moving_left(li), self.is_moving_right(li), self.is_moving_up(li), self.is_moving_down(li)))#游戲開始 game_list1 = [] #存放數字的空列表 game_list2 = [] #存放數字的空列表 [game_list1.append([' ' for j in range(4)]) for i in range(4)] #利用列表生成式生成空列表(二維數組) [game_list2.append([' ' for j in range(4)]) for i in range(4)] game = Gamefield() #創建游戲類的實例 game.reset()while True:if game.is_move(game_list1) or game.is_move(game_list2):if not game.is_move(game_list1) and not game.is_get_2048(game_list1):game.draw_number('笨蛋,游戲失敗!', 330, 850, 30, (255, 0, 0))elif not game.is_move(game_list1) and game.is_get_2048(game_list1):game.draw_number('恭喜你!其實你已經得到了2048!', 330, 850, 30, (255, 0, 0))elif game.is_move(game_list1) and game.is_get_2048(game_list1):game.draw_number('2048分已到手!繼續創高分!', 330, 850, 30, (255, 0, 0))if not game.is_move(game_list2) and not game.is_get_2048(game_list2):game.draw_number('笨蛋,游戲失敗!', 990, 850, 30, (255, 0, 0))elif not game.is_move(game_list2) and game.is_get_2048(game_list2):game.draw_number('恭喜你!其實你已經得到了2048!', 990, 850, 30, (255, 0, 0))elif game.is_move(game_list2) and game.is_get_2048(game_list2):game.draw_number('2048分已到手!繼續創高分!', 990, 850, 30, (255, 0, 0))else:if game.is_get_2048(game_list1):game.draw_number('恭喜你!其實你已經得到了2048!', 330, 850, 30, (255, 0, 0))else:game.draw_number('笨蛋,游戲失敗!', 330, 850, 30, (255, 0, 0))if game.is_get_2048(game_list2):game.draw_number('恭喜你!其實你已經得到了2048!', 990, 850, 30, (255, 0, 0))else:game.draw_number('笨蛋,游戲失敗!', 990, 850, 30, (255, 0, 0))for event in pygame.event.get():if event.type == pygame.QUIT:sys.exit()elif event.type == pygame.KEYDOWN:if event.key == pygame.K_r:game.draw_number('重置!游戲重新開始!', 330, 850, 30, (255, 0, 0))game_list1 = []game_list2 = [][game_list1.append([' ' for j in range(4)]) for i in range(4)][game_list2.append([' ' for j in range(4)]) for i in range(4)]game.reset()elif event.key == pygame.K_LEFT:while game.is_moving_left(game_list2):game_list2 = game.move_left(2,game_list2)game.init_ui(2,game_list1,game_list2)elif event.key == pygame.K_RIGHT:while game.is_moving_right(game_list2):game_list2 = game.move_right(2,game_list2)game.init_ui(2,game_list1,game_list2)elif event.key == pygame.K_UP:while game.is_moving_up(game_list2):game_list2 = game.move_up(2,game_list2)game.init_ui(2,game_list1,game_list2)elif event.key == pygame.K_DOWN:while game.is_moving_down(game_list2):game_list2 = game.move_down(2,game_list2)game.init_ui(2,game_list1,game_list2)elif event.key == pygame.K_a:while game.is_moving_left(game_list1):game_list1 = game.move_left(1,game_list1)game.init_ui(1,game_list1,game_list2)elif event.key == pygame.K_d:while game.is_moving_right(game_list1):game_list1 = game.move_right(1,game_list1)game.init_ui(1,game_list1,game_list2)elif event.key == pygame.K_w:while game.is_moving_up(game_list1):game_list1 = game.move_up(1,game_list1)game.init_ui(1,game_list1,game_list2)elif event.key == pygame.K_s:while game.is_moving_down(game_list1):game_list1 = game.move_down(1,game_list1)game.init_ui(1,game_list1,game_list2)pygame.display.update()

游戲截圖

第二道小題

""" 2. 文件score.dat中保存的是100名學生的姓名和Python課、高數和英語成績。(1)定義學生類,其中包含姓名、Python課、高數和英語成績及總分、均分數據成員,成員函數根據需要確定。 (2)讀入這名學生的成績,用對象列表進行存儲。 (3)求出各科和總分的最高分。 (4)請按總分的降序(高成績在前,低成績在后)排序 (5)在屏幕上顯示各科及總分的最高分,排序后的成績單(包括總分)保存到文件odered_score.dat中。 (6) 將文件中的所有學生信息, 保存在mariadb數據庫中; """ import random import pymysql as mysqlu = 'root' p = 'westos' d = 'python'class Student:def __init__(self, name, py_score, gs_score, eng_score):self.name = nameself.py_score = py_scoreself.gs_score = gs_scoreself.eng_score = eng_scoreself.score = self.py_score + self.gs_score + self.eng_scoreself.average = self.score / 3def create_stu(i):name = 'stu' + str(i+1)score1 = str(random.randint(40, 100))score2 = str(random.randint(40, 100))score3 = str(random.randint(40, 100))return name, score1, score2, score3with open('score.dat', 'w') as f:for i in range(100):s = create_stu(i)f.write(s[0]+' '+s[1]+' '+s[2]+' '+s[3]+'\n')data_list = [] student_list = [] with open('score.dat', 'r') as f:py_score_list = []gs_score_list = []eng_score_list = []score_list = []i = 0while True:line = f.readline().strip()if not line:breakelse:i += 1name, score1, score2, score3 = line.split()stu = Student(name, int(score1),int(score2), int(score3))data_list.append((i, name, stu.py_score, stu.gs_score, stu.eng_score, stu.score))student_list.append(stu)py_score_list.append(stu.py_score)gs_score_list.append(stu.gs_score)eng_score_list.append(stu.eng_score)score_list.append(stu.score)print('Python最高分:', max(py_score_list))print('高數最高分:', max(gs_score_list))print('英語最高分:', max(eng_score_list))print('總分最高分:', max(score_list))student_list = sorted(student_list, key=lambda stu : stu.score, reverse=True)with open('odered_score.dat','w') as f:for stu in student_list:f.write(stu.name+' '+str(stu.py_score)+' '+str(stu.gs_score)+' '+str(stu.eng_score)+' '+str(stu.score)+'\n')conn = mysql.connect(user=u,passwd=p,db=d,charset='utf8',autocommit=True) cur = conn.cursor() try:cur.execute('create table student(id int primary key,name varchar(20),python int,gaoshu int,english int,sum_score int);') except Exception as e:print('創建成績表出現錯誤...', '\n', e) else:print('在數據庫創建成績表成功....') try:cur.executemany('insert into student values(%s,%s,%s,%s,%s,%s);', data_list) except Exception as e:print('數據庫插入數據出現錯誤...', '\n', e) else:print('成績錄入數據庫成功......') cur.close() conn.close()

運行截圖

第三道小題

""" 3. 知識點復習 正整數A和正整數B 的最小公倍數是指 能被A和B整除的最小的正整數值,設計一個算法,求輸入A和B的最小公倍數。 - 輸入描述: 輸入兩個正整數A和B。 - 輸出描述: 輸出A和B的最小公倍數。 """def gas(m,n):return m if n == 0 else gas(n,m%n) m,n = input('輸入整數A,B:').split() print(int(int(m)*int(n)/gas(int(m),int(n))))

運行截圖

第四道小題

""" 4. 題目描述 Catcher 是MCA國的情報員,他工作時發現敵國會用一些對稱的密碼進行通信,比如像這些ABBA,ABA,A,123321,但是他們有時會在開始或結束時加入一些無關的字符以防止別國破解。比如進行下列變化 ABBA->12ABBA,ABA->ABAKK,123321->51233214 。因為截獲的串太長了,而且存在多種可能的情況(abaaab可看作是aba,或baaab的加密形式),Cathcer的工作量實在是太大了,他只能向電腦高手求助,你能幫Catcher找出最長的有效密碼串嗎? (注意:記得加上while處理多個測試用例) - 輸入描述:輸入一個字符串 - 輸出描述:返回有效密碼串的最大長度""" ps:我將解密后的密碼也打印出來了。s = input('輸入加密字符串:')while s != 'q':tmp = sli = []max = 0for i in range(len(s)):tmp = s[i:]if tmp != tmp[::-1]:for j in range(1,len(s)):tmp = s[i:-j]if tmp != tmp[::-1]:continueelse:if max == len(tmp):li.append(tmp)elif max < len(tmp):max = len(tmp)li = [tmp]breakelse:breakelse:if max == len(tmp):li.append(tmp)elif max < len(tmp):max = len(tmp)li = [tmp]breakelse:breakprint('最長有效密碼串長度:',max,'最長有效密碼串列表:',li)s = input('輸入加密字符串,或者按q退出:')

運行截圖

轉載于:https://blog.51cto.com/13885935/2171798

總結

以上是生活随笔為你收集整理的python之4个小作业的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 欧美人与性囗牲恔配 | 免费一级特黄特色大片 | 日日摸夜夜添夜夜 | 齐天大性床战铁扇公主 | 殴美黄色大片 | 国产成人免费观看视频 | 免费的一级黄色片 | 国产黄色观看 | 2021中文字幕 | 国产无遮掩 | 日本一区二区三区在线视频 | 日韩精品一区二区三区视频 | 国产麻豆成人传媒免费观看 | 国产美女一区二区 | 天天操夜夜欢 | 好姑娘在线观看高清完整版电影 | 日本成人在线免费视频 | 中国精品久久 | 久草成人在线视频 | 天天做夜夜做 | 久久精品国产亚洲av久一一区 | 日日不卡av | www.久久av| 99精品影视 | 9久9久9久女女女九九九一九 | 午夜视频在线免费观看 | 一区二区三区免费在线视频 | 精品中文在线 | 波多野一区 | 影音先锋中文字幕第一页 | 懂色av一区二区三区 | 五月天婷婷激情 | 亚洲二区在线观看 | 蜜桃网av| 久久天堂影院 | 精品孕妇一区二区三区 | 99精品视频免费 | 国产麻豆精品在线观看 | 狠狠综合久久av一区二区 | 欧美日韩一区二区在线观看视频 | 国产午夜免费福利 | 欧美日视频 | 樱桃香蕉视频 | 白嫩初高中害羞小美女 | 男人综合网 | 国产无精乱码一区二区三区 | 麻豆一区二区三区在线观看 | www.色视频| 美美女高清毛片视频免费观看 | 欧美一级爱爱视频 | 德国性经典xxxx性hd | 日本www在线播放 | 久久全国免费视频 | 九九99精品视频 | 9久9久9久女女女九九九一九 | 污视频网站在线播放 | 久久狠狠爱| 伊人久久久久久久久久久久久 | 欧美黄色录像视频 | 亚洲综合一区二区 | 妞干网精品 | 美女的隐私免费看 | 久久艹av | 激情视频免费观看 | 国产av毛片 | 综合亚洲欧美 | 亚洲涩涩涩 | 91漂亮少妇露脸在线播放 | 亚洲黄色精品视频 | 成人毛片在线精品国产 | 福利一区二区在线观看 | 黄色一级视频片 | 在线观看午夜视频 | 欧美人妻少妇一区二区三区 | 亚洲av无码一区二区乱孑伦as | 欧美hdse| 黑人精品无码一区二区三区 | 亚洲国产成人一区二区 | 哪里可以免费看av | 福利亚洲| 国产影视一区 | 久久99久久99精品中文字幕 | 麻豆tv在线观看 | 99国产精品欲 | jzjzz成人免费视频 | 影音先锋亚洲成aⅴ人在 | 国产午夜精品免费一区二区三区视频 | 素人女裸体| 亚洲国产免费 | 天天看天天射 | 精品一区李梓熙捆绑 | 国产一区二区三区在线免费观看 | 日本一区免费 | 色综合天天网 | 欧美hdxxxx | 国产精品国产三级国产播12软件 | 国产毛片毛片毛片毛片毛片毛片 | 男人午夜av| 黄色三级在线 |