用Python写一个石头剪子布小游戏(内附源代码)
项目功能:
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() 方法,进入事件循环
好了,以上就是这个小游戏的全部代码了,大家有什么问题可以给我留言,也可以私信我哈,还望多多指教~