网页资讯视频图片知道文库贴吧地图采购
进入贴吧全吧搜索

 
 
 
日一二三四五六
       
       
       
       
       
       

签到排名:今日本吧第个签到,

本吧因你更精彩,明天继续来努力!

本吧签到人数:0

一键签到
成为超级会员,使用一键签到
一键签到
本月漏签0次!
0
成为超级会员,赠送8张补签卡
如何使用?
点击日历上漏签日期,即可进行补签。
连续签到:天  累计签到:天
0
超级会员单次开通12个月以上,赠送连续签到卡3张
使用连续签到卡
08月05日漏签0天
泰山树妖吧 关注:5贴子:364
  • 看贴

  • 图片

  • 吧主推荐

  • 游戏

  • 5回复贴,共1页
<<返回泰山树妖吧
>0< 加载中...

【python】写了一个扫雷

  • 只看楼主
  • 收藏

  • 回复
  • 泰山树妖
  • ★★☆☆
    13
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
本打算写个扫雷的小程序的,但是不会,只能生产扫雷的基本数据,存在excel中,不到具体能玩的小游戏如何生成。


  • 泰山树妖
  • ★★☆☆
    13
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
import pandas as pd
import os
import random
try: # 用户设置(n和m,均为正整数)
str_a = (r"""设置雷区的列,行,平均每列雷的个数。三个正整数,并用英文空格隔开。
例如: 15 15 3
注,第三个数小于第一个数,否者会出错。
""")
n1, n2, m = input(str_a).split(" ")
n1, n2, m = int(n1), int(n2), int(m)
except:
print("输入参数有误,按默认参数执行: 15 15 3")
n1, n2, m = 15, 15, 3
def sum_lei(x, y): # 调用dict_rand中数据,统计(x, y)周围雷的个数
sum_xy = 0 # 存储(x, y)周围雷的个数
for i in range(x-1, x+2):
for j in range(y-1, y+2):
if i in range(n1) and j in range(n2) and dict_rand[(i, j)] == "*":
sum_xy += 1
return sum_xy
path = r"{}\扫雷.xlsx".format(os.getcwd()) # 获取路径(相对路径+文件名)
list_rand = [((i, j), random.random()) for i in range(n1) for j in range(n2)] # 生成元组((x,y),v)列表
list_rand.sort(key=lambda v: v[1]) # 按照元组的第二个元素进行排序
dict_rand = {k: ("*" if v < list_rand[m*n2][1] else "") for (k, v) in list_rand} # 前m*n2为雷,其它位置为空,并存为字典
data = pd.DataFrame([[""]*n2]*n1) # 生成空的二维数据表
for (x, y), v in dict_rand.items(): # 统计周围雷的个数,并转为二维数据表
data.loc[x, y] = "*" if v == "*" else sum_lei(x, y)
data.to_excel(path) # 数据写入EXCEL
print("{}×{}区域,{}%的雷(共{}个雷),配置完成,并写入EXCEL。".format(n1, n2, int(m/n1*100), n2*m)) # 提醒完成


2025-08-05 08:28:37
广告
不感兴趣
开通SVIP免广告
  • 泰山树妖
  • ★★☆☆
    13
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
没有格式了,,分拆开发一下:
用户输入雷区大小和雷的比例
try: # 用户设置(n和m,均为正整数)
str_a = (r"""设置雷区的列,行,平均每列雷的个数。三个正整数,并用英文空格隔开。
例如: 15 15 3
注,第三个数小于第一个数,否者会出错。
""")
n1, n2, m = input(str_a).split(" ")
n1, n2, m = int(n1), int(n2), int(m)
except:
print("输入参数有误,按默认参数执行: 15 15 3")
n1, n2, m = 15, 15, 3


  • 泰山树妖
  • ★★☆☆
    13
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
def sum_lei(x, y): # 调用dict_rand中数据,统计(x, y)周围雷的个数
sum_xy = 0 # 存储(x, y)周围雷的个数
for i in range(x-1, x+2):
for j in range(y-1, y+2):
if i in range(n1) and j in range(n2) and dict_rand[(i, j)] == "*":
sum_xy += 1
return sum_xy


  • 泰山树妖
  • ★★☆☆
    13
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
生成随即位置的雷:
path = r"{}\扫雷.xlsx".format(os.getcwd()) # 获取路径(相对路径+文件名)
list_rand = [((i, j), random.random()) for i in range(n1) for j in range(n2)] # 生成元组((x,y),v)列表
list_rand.sort(key=lambda v: v[1]) # 按照元组的第二个元素进行排序
dict_rand = {k: ("*" if v < list_rand[m*n2][1] else "") for (k, v) in list_rand} # 前m*n2为雷,其它位置为空,并存为字典


  • 泰山树妖
  • ★★☆☆
    13
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
统计雷的个数,存储为二维数据:
data = pd.DataFrame([[""]*n2]*n1) # 生成空的二维数据表
for (x, y), v in dict_rand.items(): # 统计周围雷的个数,并转为二维数据表
data.loc[x, y] = "*" if v == "*" else sum_lei(x, y)
data.to_excel(path) # 数据写入EXCEL
print("{}×{}区域,{}%的雷(共{}个雷),配置完成,并写入EXCEL。".format(n1, n2, int(m/n1*100), n2*m)) # 提醒完成


登录百度账号

扫二维码下载贴吧客户端

下载贴吧APP
看高清直播、视频!
  • 贴吧页面意见反馈
  • 违规贴吧举报反馈通道
  • 贴吧违规信息处理公示
  • 5回复贴,共1页
<<返回泰山树妖吧
分享到:
©2025 Baidu贴吧协议|隐私政策|吧主制度|意见反馈|网络谣言警示