鱼C论坛

 找回密码
 立即注册
12
返回列表 发新帖
楼主: 冬雪雪冬

[技术交流] Python:每日一题 148

[复制链接]
发表于 2018-2-13 17:35:35 | 显示全部楼层
  1. M = 'M'
  2. field = [[0,0,0,0,0,0,0,0,0,0],\
  3.          [0,0,0,0,M,M,0,0,0,0],\
  4.          [0,0,0,0,M,0,0,0,0,0],\
  5.          [0,0,0,0,M,M,0,0,0,0],\
  6.          [0,0,M,0,0,0,0,0,0,0],\
  7.          [0,0,M,0,0,0,0,0,0,0],\
  8.          [0,0,0,0,0,0,0,0,0,0],\
  9.          [0,0,0,0,M,M,0,0,0,0],\
  10.          [0,M,0,0,0,0,M,0,0,0],\
  11.          [M,0,0,0,0,0,0,0,0,0],\
  12.          ]
  13. field2 = field

  14. #方法一
  15. print('-'*10+'1'+'-'*10)
  16. def scan1(i,j,field):
  17.     boom = 0
  18.     for x in (i-1, i, i+1):
  19.         if x >=0 and x <=9:
  20.             for y in (j-1, j, j+1):
  21.                 if y>=0 and y<=9:
  22.                     if field[x][y] == 'M':
  23.                         boom += 1  
  24.     return boom

  25. result = [scan1(i,j,field) if field[i][j] != 'M' else 'M' for i in range(10) for j in range(10) ]
  26. count = 0
  27. for each in result:
  28.     print(each, end = ' ')
  29.     count+=1
  30.     if count%10 == 0:
  31.         print()

  32. #方法二
  33. print('-'*10+'2'+'-'*10)
  34. def plusone(i, j, field):
  35.     try:
  36.         for x in (i-1, i, i+1):
  37.             for y in (j-1, j, j+1):
  38.                 field[x][y] += 1
  39.     except:
  40.         pass
  41. def scan2(field):
  42.     for i in range(10):
  43.         for j in range(10):
  44.             if field[i][j] == 'M':
  45.                 plusone(i, j ,field)
  46. scan2(field2)
  47. for each in field2:
  48.     print(each)

复制代码

  1. ----------1----------
  2. 0 0 0 1 2 2 1 0 0 0
  3. 0 0 0 2 M M 1 0 0 0
  4. 0 0 0 3 M 5 2 0 0 0
  5. 0 1 1 3 M M 1 0 0 0
  6. 0 2 M 3 2 2 1 0 0 0
  7. 0 2 M 2 0 0 0 0 0 0
  8. 0 1 1 2 2 2 1 0 0 0
  9. 1 1 1 1 M M 2 1 0 0
  10. 2 M 1 1 2 3 M 1 0 0
  11. M 2 1 0 0 1 1 1 0 0
  12. ----------2----------
  13. [0, 0, 0, 1, 2, 2, 1, 0, 0, 0]
  14. [0, 0, 0, 2, 'M', 'M', 0, 0, 0, 0]
  15. [0, 0, 0, 1, 'M', 0, 0, 0, 0, 0]
  16. [0, 1, 1, 1, 'M', 'M', 0, 0, 0, 0]
  17. [0, 2, 'M', 0, 0, 0, 0, 0, 0, 0]
  18. [0, 0, 'M', 0, 0, 0, 0, 0, 0, 0]
  19. [0, 0, 0, 1, 2, 2, 1, 0, 0, 0]
  20. [1, 1, 1, 1, 'M', 'M', 0, 0, 0, 0]
  21. [2, 'M', 0, 0, 0, 0, 'M', 0, 0, 1]
  22. ['M', 0, 0, 0, 0, 0, 0, 0, 0, 0]
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-4-25 18:41:03 | 显示全部楼层
本帖最后由 凌九霄 于 2018-4-25 18:42 编辑
  1. import random

  2. lst = [['◇' if random.randint(0, 9) > 1 else 'M' for i in range(10)] for i in range(10)]  #随机生成雷区列表


  3. def countboom(lst, x, y):
  4.     boom = 0
  5.     if lst[x][y] != 'M':
  6.         if (x - 1) >= 0 and (y - 1) >= 0:
  7.             if lst[x - 1][y - 1] == 'M':
  8.                 boom += 1
  9.         if (x - 1) >= 0:
  10.             if lst[x - 1][y] == 'M':
  11.                 boom += 1
  12.         if (x - 1) >= 0 and (y + 1) <= 9:
  13.             if lst[x - 1][y + 1] == 'M':
  14.                 boom += 1
  15.         if (y - 1) >= 0:
  16.             if lst[x][y - 1] == 'M':
  17.                 boom += 1
  18.         if (y + 1) <= 9:
  19.             if lst[x][y + 1] == 'M':
  20.                 boom += 1
  21.         if (x + 1) <= 9 and (y - 1) >= 0:
  22.             if lst[x + 1][y - 1] == 'M':
  23.                 boom += 1
  24.         if (x + 1) <= 9:
  25.             if lst[x + 1][y] == 'M':
  26.                 boom += 1
  27.         if (x + 1) <= 9 and (y + 1) <= 9:
  28.             if lst[x + 1][y + 1] == 'M':
  29.                 boom += 1
  30.     return boom


  31. for i in range(10):
  32.     for j in range(10):
  33.         if lst[i][j] != 'M':
  34.             bc = countboom(lst, i, j)
  35.             if bc == 0:
  36.                 lst[i][j] = '0'
  37.             else:
  38.                 lst[i][j] = str(bc)

  39. for i in lst:
  40.     for j in i:
  41.         print('{0:^3}|'.format(j), end='')
  42.     print()
复制代码


360截图20180425184027299.jpg
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-1-10 16:30:13 | 显示全部楼层
  1. import random

  2. # 生成雷区并加入地雷(数量不超过10个,位置均不确定)
  3. def createMine(mineList):
  4.         # 生成空白雷区
  5.         mineList = [[0 for i in range(10)] for j in range(10)]
  6.         # 植入地雷
  7.         temp = []
  8.         while True:
  9.                 x, y = random.randint(0, 8), random.randint(0, 8)
  10.                 mineList[x][y] = 'M'
  11.                 temp.append((x, y))
  12.                 if len(set(temp)) == 10:
  13.                         break
  14.         temp = list(set(temp))
  15.         for i in temp:
  16.                 temp[temp.index(i)] = list(i)
  17.                 for x in range(3):
  18.                         for y in range(3):
  19.                                 a = i[0] + 1 - x
  20.                                 b = i[1] + 1 - y
  21.                                 if (x == y == 1) :
  22.                                         continue
  23.                                 if mineList[a][b] != 'M':
  24.                                         if (a < 0) or (a > 9):
  25.                                                 break
  26.                                         elif (b < 0) or (b > 9) :
  27.                                                 continue
  28.                                         else :
  29.                                                 mineList[a][b] += 1
  30.         # 输出结果
  31.         for i in range(10):
  32.                 for j in range(10):
  33.                         print(mineList[i][j], end='  ')
  34.                 print()


  35. createMine([])
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-4-11 16:01:45 | 显示全部楼层
  1. import random

  2. def fun148(n,grid):
  3.     grid_list = [[0] * grid for i in range(grid)]
  4.     mine_list = []
  5.     for i in range(n):
  6.         x = random.randint(0,grid-1)
  7.         y = random.randint(0,grid-1)
  8.         while [x,y] in  mine_list:
  9.             x = random.randint(0,grid-1)
  10.             y = random.randint(0,grid-1)
  11.         mine_list.append([x,y])
  12.         grid_list[x][y] = "M"

  13.         #判断范围
  14.         #上三
  15.         if x > 0 and y > 0 and grid_list[x - 1][y - 1] != "M":
  16.             grid_list[x - 1][y - 1] += 1
  17.         if y > 0 and grid_list[x][y - 1] != "M":
  18.             grid_list[x][y - 1] += 1
  19.         if x < grid - 1 and y > 0 and grid_list[x + 1][y - 1] != "M":
  20.             grid_list[x + 1][y - 1] += 1

  21.         #中二
  22.         if x > 0 and grid_list[x - 1][y] != "M":
  23.             grid_list[x - 1][y] += 1
  24.         if x < grid - 1 and grid_list[x + 1][y] != "M":
  25.             grid_list[x + 1][y] += 1

  26.         #下三
  27.         if x > 0 and y < grid - 1 and grid_list[x - 1][y + 1] != "M":
  28.             grid_list[x - 1][y + 1] += 1
  29.         if y < grid - 1 and grid_list[x][y + 1] != "M":
  30.             grid_list[x][y + 1] += 1
  31.         if x < grid - 1 and y < grid - 1 and grid_list[x + 1][y + 1] != "M":
  32.             grid_list[x + 1][y + 1] += 1   
  33.          

  34.     for i in grid_list:
  35.         for j in i:
  36.             print(j,end=" ")
  37.         print()
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-3-29 07:03

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表