用Python寫一個石頭剪子布小遊戲(內附原始碼)
阿新 • • 發佈:2020-11-29
專案功能:
1.系統生成隨機的石頭剪刀布,玩家輸入石頭剪刀布
2.因為玩家可能會輸入shitou st這樣的輸入,需要格式化成合理輸入
3.進行石頭剪刀布的遊戲,輸出遊戲結果,假設每次可以玩5局
4.將遊戲結果寫入到excel中,包括系統出拳,玩家出拳,遊戲結果,目前得分
5.遊戲有歡迎資訊(歡迎來到遊戲)和使用者互動(遊戲剩餘次數)
6.如果遊戲的得分達到0分,遊戲也會結束
7.在開始遊戲的時候要求使用者輸入玩家姓名,會創建於玩家姓名同名的sheet頁
8.如果玩家已經存在,則輸出歡迎回來,您目前的積分為:xx分
9.如果玩家不存在,則輸出歡迎來到遊戲,您目前有5個積分
10.當是老玩家,遊戲積分為0分,則提示使用者充值,充值1元2積分
程式碼如下:
import requests import parsel import pdfkit import csv import threading f = open('新聞.csv', mode='a', encoding='utf-8-sig', newline='') csv_writer = csv.DictWriter(f, fieldnames=['標題', '作者', '日期', '新聞詳情頁']) csv_writer.writeheader() headers = { 'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36' } html_str = """ <!doctype html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> </head> <body> {article} </body> </html> """ def get_html(html_url): response = requests.get(url=html_url, headers=headers) return response def get_pars(html_data): selector = parsel.Selector(html_data) return selector def save_article(article, title): html_path = '重慶新聞\\' + title + '.html' pdf_path = '重慶新聞pdf\\' + title + '.pdf' html = html_str.format(article=article) with open(html_path, mode='w', encoding='utf-8') as f: f.write(html) print('{}已下載完成'.format(title)) # exe 檔案存放的路徑 config = pdfkit.configuration(wkhtmltopdf='C:\\Program Files\\wkhtmltopdf\\bin\\wkhtmltopdf.exe') # 把 html 通過 pdfkit 變成 pdf 檔案 pdfkit.from_file(html_path, pdf_path, configuration=config) def save_img(img_urls): for i in img_urls: img_url = 'http://news.cqu.edu.cn' + i img_content = get_html(img_url).content img_name = img_url.split('/')[-1] with open('新聞圖片\\' + img_name, mode='wb') as f: f.write(img_content) def main(url): html_data = get_html(url).text selector = get_pars(html_data) lis = selector.css('body > div:nth-child(4) > div > div.lists .title a::attr(href)').getall() for li in lis: content_data = get_html(li).text li_selector = get_pars(content_data) title = li_selector.css('.dtitle::text').get() # 新聞標題 article = li_selector.css('.acontent').get() # 新聞內容 name_list = li_selector.css('.dinfoa a::text').getall() # 作者 name = '|'.join(name_list) date_list = li_selector.css('.ibox span::text').getall() date_str = ''.join(date_list) # 新聞日期 img_urls = li_selector.css('.acontent p img::attr(src)').getall() # 獲取新聞內圖片 dit = { '標題': title, '作者': name, '日期': date_str, '新聞詳情頁': li, } csv_writer.writerow(dit) save_article(article, title) save_img(img_urls) if __name__ == '__main__': for page in range(1, 11): url = 'https://news.cqu.edu.cn/newsv2/news-127.html?&page={}'.format(page) main_thread = threading.Thread(target=main, args=(url,)) main_thread.start()
#!/usr/bin/env python3 # -*- coding: utf-8 -*- from tkinter import * class Application(Frame): """一個經典的GUI程式寫法""" def __init__(self, master=None): super(Application, self).__init__(master) self.master = master self.pack() self.createWidget() def createWidget(self): """建立元件""" # 計算器上的各個數字鍵和功能鍵全部集合到一個列表中 self.btn_key = [ ['MC', 'M+', 'M-', 'MR'], ['C', '±', '÷', '×'], ['7', '8', '9', '-'], ['4', '5', '6', '+'], ['1', '2', '3', '='], ['0', '.'] ] v1 = StringVar() v1.set('0') # 設定輸入框中初始顯示值為 0 Entry(self, textvariable=v1, font=('微軟雅黑', 14)).grid(row=0, column=0, columnspan=4, sticky=EW, pady=10) for i, li in enumerate(self.btn_key): for index, k in enumerate(li): if k == '=': Button(self, text=k, fg='black', font=('微軟雅黑', 14)) \ .grid(row=i + 1, column=index, sticky=NSEW, rowspan=2) elif k == '0': Button(self, text=k, fg='black', font=('微軟雅黑', 14)) \ .grid(row=i + 1, column=index, sticky=EW, columnspan=2) elif k == '.': Button(self, text=k, fg='black', font=('微軟雅黑', 14)) \ .grid(row=i + 1, column=index + 1, sticky=EW) else: Button(self, text=k, fg='black', font=('微軟雅黑', 14)) \ .grid(row=i + 1, column=index, sticky=EW) if __name__ == '__main__': root = Tk() # 建立一個主視窗 root.title('我的計算器') root.geometry('230x315+0+0') # 調整視窗位置和大小 app = Application(master=root) root.mainloop() # 呼叫元件的 mainloop() 方法,進入事件迴圈
好了,以上就是這個小遊戲的全部程式碼了,大家有什麼問題可以給我留言,也可以私信我哈,還望多多指教~