1. 程式人生 > 其它 >20192127盧天若 實驗四《Python綜合實踐》實驗報告

20192127盧天若 實驗四《Python綜合實踐》實驗報告

20192127 2020-2021-2 《Python程式設計》實驗四報告

課程:《Python程式設計》
班級: 1921
姓名: 蔣龍騰
學號:20192127
實驗教師:王志強
實驗日期:2021年6月28日
必修/選修: 公選課

1.實驗內容

1.解析某網站的hxml,得到了一些關於《明日方舟》遊戲內容的資料

2.將資料總結整理並且修改

3.仿照遊戲內的抽卡內容,製作了一個抽卡的遊戲小軟體

2. 實驗過程及結果

  from bs4 import BeautifulSoup
  import os
  from tkinter import *
  import tkinter.messagebox
  from time import sleep
  import random
  import webbrowser
  # dir_path = os.path.dirname(os.path.abspath(__file__))
  # os.chdir(dir_path)
  file = open('Kokodayo ArknightsData kkdy 一個平平無奇的明日方舟資料庫 1.0 Wiki 維基 資料.html','rb')
  html = file.read()
  soup = BeautifulSoup(html,"html.parser")
  sp = soup.find_all(class_ ='profile-container')
  str1 = str(sp[0])
  # print(str1)
  listurl = []
  listname = []
  sp2 = soup.find_all(class_ ='profile-item-inner-wrapper')
  for y in sp2:
      str2 = str(y)
      pattern2 = re.compile(r'href="(.*?)"')
      result2 = pattern2.findall(str2)
      listurl.append(result2[0])
      # print(result2[0])
  # print(listurl)
  sp3 = soup.find_all(class_ ='image-inner')
  for x in sp3:
      str3 = str(x)
      pattern3 = re.compile(r'alt="(.*?)"')
      result3 = pattern3.findall(str3)
      listname.append(result3[0])
      # print(result3[0])
  # print(listname)
  lista = listname.copy()
  for z1 in range(0,2):
      listname.append(listname[2])
      listname.append(listname[5])
      listname.append(listname[6])
      listname.append(listname[10])
      listname.append(listname[11])
      listname.append(listname[15])
      listname.append(listname[18])
      listname.append(listname[19])
      listname.append(listname[21])
      listname.append(listname[23])
      listname.append(listname[24])
      listname.append(listname[26])
      listname.append(listname[27])
      listname.append(listname[29])
      listname.append(listname[32])
      listname.append(listname[33])
      listname.append(listname[37])
      listname.append(listname[40])
      listname.append(listname[41])
      listname.append(listname[44])
      listname.append(listname[49])
      listname.append(listname[65])
      listname.append(listname[66])
      listname.append(listname[67])
      listname.append(listname[68])
      listname.append(listname[69])
      listname.append(listname[70])
      listname.append(listname[71])
      listname.append(listname[72])
      listname.append(listname[73])
      listname.append(listname[74])
      listname.append(listname[75])
      listname.append(listname[76])
      listname.append(listname[77])
      listname.append(listname[78])
      listname.append(listname[79])
      listname.append(listname[80])
      listname.append(listname[81])
      listname.append(listname[82])
      listname.append(listname[83])
      listname.append(listname[84])
      listname.append(listname[85])
      listname.append(listname[86])
      listname.append(listname[87])
      listname.append(listname[89])
      listname.append(listname[90])
      listname.append(listname[91])
      listname.append(listname[92])
  for z2 in range(0,9):
      listname.append(listname[7])
      listname.append(listname[8])
      listname.append(listname[12])
      listname.append(listname[13])
      listname.append(listname[22])
      listname.append(listname[28])
      listname.append(listname[30])
      listname.append(listname[34])
      listname.append(listname[35])
      listname.append(listname[38])
      listname.append(listname[42])
      listname.append(listname[45])
      listname.append(listname[51])
      listname.append(listname[93])
      listname.append(listname[94])
      listname.append(listname[95])
      listname.append(listname[96])
      listname.append(listname[97])
      listname.append(listname[98])
      listname.append(listname[99])
      listname.append(listname[100])
      listname.append(listname[101])
      listname.append(listname[102])
      listname.append(listname[103])
      listname.append(listname[104])
      listname.append(listname[105])
      listname.append(listname[106])
      listname.append(listname[107])
      listname.append(listname[108])
      listname.append(listname[109])
      listname.append(listname[110])
      listname.append(listname[111])
      listname.append(listname[112])
      listname.append(listname[113])
      listname.append(listname[114])
      listname.append(listname[115])
      listname.append(listname[116])
  for z3 in range(0,14):
      listname.append(listname[46])
      listname.append(listname[47])
      listname.append(listname[52])
      listname.append(listname[53])
      listname.append(listname[117])
      listname.append(listname[118])
      listname.append(listname[119])
      listname.append(listname[120])
      listname.append(listname[121])
      listname.append(listname[122])
      listname.append(listname[123])
      listname.append(listname[124])
      listname.append(listname[125])
      listname.append(listname[126])
      listname.append(listname[127])
      listname.append(listname[128])
      listname.append(listname[129])
  for z4 in range(0,19):
      listname.append(listname[130])
      listname.append(listname[131])
      listname.append(listname[132])
      listname.append(listname[133])
      listname.append(listname[134])
  window = Tk()
  window.title('明日方舟模擬抽卡器')
  window.geometry('997x766')
  window.iconphoto(True, PhotoImage(file='kroos.png'))
  var = StringVar()
  photo = PhotoImage(file="BG.png")
  l = Label(window, textvariable=var, image=photo,compound = CENTER, fg='black', font=('楷體', 36, 'bold'),justify=LEFT)
  l.place(x=498.5, y=383, anchor='center')
  on_hit = False
  
  def hit_me():
      global on_hit
      if on_hit == False:
          var.set("正在抽卡。。。")
          sleep(1)
          p = random.randint(0, len(listname)-1)
          q = listname.index(listname[p])
          if q in [2,5,6,10,11,15,18,19,21,23,24,26,27,29,32,33,37,40,41,44,49,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92]:
              a = "恭喜!五星!你有一副歐洲人的面孔"
          elif q in [7,8,12,13,22,28,30,34,35,38,42,45,51,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116]:
              a = "可惜!四星!下一抽一定會出貨"
          elif q in [46,47,52,53,117,118,119,120,121,122,123,124,125,126,127,128,129]:
              a = "慘!三星!你的膚色一定很健康"
          elif q in [130,131,132,133,134]:
              a = "二星。。。沒救了,抬走吧"
          else:
              a = "WTF?!!!歐皇分我點歐氣好嗎,秋梨膏!"
  
          tkinter.messagebox.showinfo(title='foo↑foo↑', message=a)
          text = Text(window, width=50, height=1)
          text.place(x=498.5, y=200, anchor='center')
          text.insert(INSERT, listurl[q])
          c = len(listurl[q])
          text.tag_add('link', '1.0', str(1+c/100))
          text.tag_config('link', foreground='black', underline=True)
          def show_arrow_cursor(event):
              text.config(cursor='arrow')
          def show_xterm_cursor(event):
              text.config(cursor='xterm')
          def click(event):
              webbrowser.open(listurl[q])
          text.tag_bind('link', '<Enter>', show_arrow_cursor)
          text.tag_bind('link', '<Leave>', show_xterm_cursor)
          text.tag_bind('link', '<Button-1>', click)
          var.set(listname[p])
  b = Button(window, text='抽卡', font=('楷體', 24), width=10, height=1, command=hit_me)
  b.place(x=498.5, y=600, anchor='center')
  window.mainloop()
  file.close()

結果展示:



碼雲連結:

應用下載:

提取碼:6u1j

3. 實驗過程中遇到的問題和解決過程

  • 問題1:標籤太雜太亂,需要的資料很難找到
  • 問題1解決方案:開啟原網頁的介面用F12的開發者除錯工具來找到對應資料的標籤和屬性
  • 問題2:需要提取的資料內容在標籤的屬性中
  • 問題2解決方案:利用正則表示式篩選整個字串當中的herf屬性,並將其中的資料儲存到一個列表裡方便呼叫
  • 問題3:列表當中的資料都是平權的,我需要一個加權的功能,但是擴張列表之後要定位到原來的資料很困難
  • 問題3:解決方案:利用copy函式在加權之前新建一個列表,並用index函式找到擴張列表中第一個被篩選出的資料的位置(即在原列表中的位置)
  • 問題4:py檔案需要轉化成可執行檔案使用
  • 問題4:解決方案:安裝pyinstaller,在命令列執行相應命令進行打包
  • 問題5:更改視窗圖示時,用iconbitmap函式無法準確定位ico圖片所在路徑
  • 問題5:解決方案:改用iconphoto函式,預設是py檔案所在的相對路徑

其他(感悟、思考等)

感悟:

學習一門程式語言是很難的,在這短暫的一學期中深深體會到了這一點,特別是對於我們大一新生來說,連C語言都剛剛開始起步的我們更是難上加難。可是越是如此,越能狠下心來鑽研,不懂的地方一定要弄懂,為此反覆百度,查閱各種資料。等到當下的問題解決了之後,回過頭才發現自己的水平更上一層樓,不僅僅是對問題的解答,更是對整個邏輯思維的更深入理解,對於我們計算機系的同學來說,這份理解是最最難得可貴的。感謝王老師一學期來的陪伴,收穫頗豐,感激之情,溢於言表。課結了,但是python語言學習遠遠不止如此,沒有人能在一學期內掌握一門語言,所以未來我也會更加努力,更深入的探究python的奧祕。