鱼C论坛

 找回密码
 立即注册
查看: 3902|回复: 23

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

[复制链接]
发表于 2018-2-5 10:12:21 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 冬雪雪冬 于 2018-2-8 20:49 编辑

我们的玩法做了一下改变:

1. 楼主不再提供答案。
2. 请大家先独立思考”,再参考其他鱼油的解答,这样才有助于自己编程水平的提高。
3. 鼓励大家积极答题,奖励的期限为出题后24小时内。
4. 根据答案的质量给予1~3鱼币的奖励。

题目:
我们都玩过windows的小游戏挖雷。现在告诉你雷在哪里,请标出其他位置的代表周围雷数量的数字。
例如5*5的雷场中有如下4颗雷
0.jpg 则标出的数字为
1.jpg


请你标出10*10雷场的各个空位的数字。
2.jpg

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-2-5 11:48:07 | 显示全部楼层
本帖最后由 jerryxjr1220 于 2018-2-5 12:11 编辑
  1. matrix_string = '''         
  2.     MM   
  3.     M     
  4.     MM   
  5.   M      
  6.   M      
  7.          
  8.     MM   
  9. M    M   
  10. M         '''
  11. matrix = matrix_string.split('\n')
  12. for i in range(len(matrix)):
  13.         matrix[i] = [a if a=="M" else 0 for a in matrix[i]]
  14. def modify(x,y):
  15.         if x<0 or y<0:
  16.                 return
  17.         try:
  18.                 matrix[x][y] += 1
  19.         except:
  20.                 pass
  21. for x in range(10):
  22.         for y in range(10):
  23.                 if matrix[x][y]=='M':
  24.                         modify(x-1,y-1)
  25.                         modify(x-1,y)
  26.                         modify(x-1,y+1)
  27.                         modify(x,y-1)
  28.                         modify(x,y+1)
  29.                         modify(x+1,y-1)
  30.                         modify(x+1,y)
  31.                         modify(x+1,y+1)
  32. for each in matrix:
  33.         print(*each)
复制代码

0 0 0 1 2 2 1 0 0 0
0 0 0 2 M M 1 0 0 0
0 0 0 3 M 5 2 0 0 0
0 1 1 3 M M 1 0 0 0
0 2 M 3 2 2 1 0 0 0
0 2 M 2 0 0 0 0 0 0
0 1 1 2 2 2 1 0 0 0
1 1 1 1 M M 2 1 0 0
2 M 1 1 2 3 M 1 0 0
M 2 1 0 0 1 1 1 0 0
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2018-2-5 12:34:06 | 显示全部楼层
1.png

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3

查看全部评分

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

使用道具 举报

发表于 2018-2-5 13:51:57 | 显示全部楼层
本帖最后由 天圆突破 于 2018-2-5 14:06 编辑
  1. def mines(lst):
  2.     #打印小棋盘
  3.     for each1 in lst:
  4.         print('')
  5.         for each2 in each1:
  6.             print(' ' + each2 + ' ',end = '')

  7.     #分隔
  8.     print('\n'*3)

  9.     #扩大棋盘
  10.     for each in lst:
  11.         each.insert(0,'-')
  12.         each.append('-')
  13.     lst.insert(0,['-' for i in range(12)])
  14.     lst.append(['-' for i in range(12)])

  15.     #打印大棋盘
  16.     for each1 in lst:
  17.         print('')
  18.         for each2 in each1:
  19.             print(' ' + each2 + ' ',end = '')

  20.     #计算小棋盘
  21.     while True:
  22.         flag = 0
  23.         for i in range(1,11):
  24.             for j in range(1,11):
  25.                 if lst[i][j] != '-':
  26.                     pass
  27.                 else:
  28.                     temp = list()
  29.                     for a in range(i-1,i+2):
  30.                         for b in range(j-1,j+2):
  31.                             temp.append(lst[a][b])
  32.                     res = temp.count('M')
  33.                     lst[i][j] = str(res)
  34.                     flag += 1
  35.         if flag == 0:
  36.             break

  37.     #分隔
  38.     print('\n'*3)

  39.     # 还原棋盘
  40.     del lst[0]
  41.     del lst[10]
  42.     for each in lst:
  43.         del each[0]
  44.         del each[10]

  45.     #打印棋盘
  46.     for each1 in lst:
  47.         print('')
  48.         for each2 in each1:
  49.             print(' ' + each2 + ' ',end = '')

  50. if __name__ == '__main__':

  51.     #生成棋盘
  52.     lst = [['-' for i in range(10)] for j in range(10)]
  53.     lst[1][4] = lst[1][5] = lst[2][4] = lst[3][4] = lst[3][5] = lst[4][2] = lst[5][2] = lst[7][4] = lst[7][5] = lst[8][1] = lst[8][6] = lst[9][0] = 'M'

  54.     #执行
  55.     mines(lst)
复制代码

扫雷1.jpg 扫雷2.jpg 扫雷3.jpg

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2018-2-5 13:54:58 | 显示全部楼层
不会啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-2-5 15:37:21 | 显示全部楼层
def Check_count(out_leiquc):
        for i in range(10):
                for j in range(10):
                        if leiqu[i][j] != 9:
                                if i == 0 and j == 0:
                                        out_leiquc[i][j] = leiqu[i][j+1] + leiqu[i+1][j] + leiqu[i+1][j+1]
                                        out_leiquc[i][j] = out_leiqu[i][j]//9
                                elif i == 0 and j == 9:
                                        out_leiquc[i][j] = leiqu[i][j-1] + leiqu[i+1][j-1] + leiqu[i+1][j]
                                        out_leiquc[i][j] = out_leiqu[i][j]//9
                                elif i == 9 and j == 0:
                                        out_leiquc[i][j] = leiqu[i-1][j] + leiqu[i-1][j+1] + leiqu[i][j+1]
                                        out_leiquc[i][j] = out_leiqu[i][j]//9
                                elif i == 9 and j == 9:
                                        out_leiquc[i][j] = leiqu[i-1][j-1] + leiqu[i-1][j] + leiqu[i][j-1]
                                        out_leiquc[i][j] = out_leiqu[i][j]//9
                               
                                elif i == 0 and j != 0 and j != 9:
                                        out_leiquc[i][j] = leiqu[i][j-1] +                   leiqu[i][j+1] +\
                                                                  leiqu[i+1][j-1] + leiqu[i+1][j] + leiqu[i+1][j+1]
                                        #print(i,j,leiqu[i][j-1])检查错误,这里我把函数定义变量和全局变量名字写成一样了,小白坑了半小时
                                        out_leiquc[i][j] = out_leiqu[i][j]//9
                                elif i == 9 and j != 0 and j != 9:
                                        out_leiquc[i][j] = leiqu[i-1][j-1] + leiqu[i-1][j] + leiqu[i-1][j+1] +\
                                                                  leiqu[i][j-1] +                   leiqu[i][j+1]
                                        out_leiquc[i][j] = out_leiqu[i][j]//9
                                elif j == 0 and i != 0 and i != 9:
                                        out_leiquc[i][j] = leiqu[i-1][j] + leiqu[i-1][j+1] +\
                                                                                                  leiqu[i][j+1] +\
                                                                  leiqu[i+1][j] + leiqu[i+1][j+1]
                                        out_leiquc[i][j] = out_leiqu[i][j]//9
                                elif j == 9 and i != 0 and i != 9:
                                        out_leiquc[i][j] = leiqu[i-1][j-1] + leiqu[i-1][j] +\
                                                                  leiqu[i][j-1] +\
                                                                  leiqu[i+1][j-1] + leiqu[i+1][j]
                                        out_leiquc[i][j] = out_leiqu[i][j]//9
                       
                                else:
                                        out_leiquc[i][j] = leiqu[i-1][j-1] + leiqu[i-1][j] + leiqu[i-1][j+1] +\
                                                                  leiqu[i][j-1] +                   leiqu[i][j+1] +\
                                                                  leiqu[i+1][j-1] + leiqu[i+1][j] + leiqu[i+1][j+1]
                                        out_leiquc[i][j] = out_leiqu[i][j]//9



out_leiqu = [[0,0,0,0,0,0,0,0,0,0],
                 [0,0,0,0,9,9,0,0,0,0],
                 [0,0,0,0,9,0,0,0,0,0],
                 [0,0,0,0,9,9,0,0,0,0],
                 [0,0,9,0,0,0,0,0,0,0],
                 [0,0,9,0,0,0,0,0,0,0],
                 [0,0,0,0,0,0,0,0,0,0],
                 [0,0,0,0,9,9,0,0,0,0],
                 [0,9,0,0,0,0,9,0,0,0],
                 [9,0,0,0,0,0,0,0,0,0]]

leiqu = [[0,0,0,0,0,0,0,0,0,0],
                 [0,0,0,0,9,9,0,0,0,0],
                 [0,0,0,0,9,0,0,0,0,0],
                 [0,0,0,0,9,9,0,0,0,0],
                 [0,0,9,0,0,0,0,0,0,0],
                 [0,0,9,0,0,0,0,0,0,0],
                 [0,0,0,0,0,0,0,0,0,0],
                 [0,0,0,0,9,9,0,0,0,0],
                 [0,9,0,0,0,0,9,0,0,0],
                 [9,0,0,0,0,0,0,0,0,0]]

Check_count(out_leiqu)
#光把9转回M不直观,索性全部转换成字符串,看起来直观
for a in range(10):
        for b in range(10):
                if out_leiqu[a][b] == 9:
                        out_leiqu[a][b] = 'M'
                else:
                        out_leiqu[a][b] = str(out_leiqu[a][b])
for i in range(10):
        print(out_leiqu[i])

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3

查看全部评分

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

使用道具 举报

发表于 2018-2-5 15:41:17 | 显示全部楼层
本帖最后由 yjsx86 于 2018-2-6 09:54 编辑

  1. import random
  2. def mineGame(co_x,co_y,amount=10):
  3.     'co_x*co_y初始地图大小 amount初始地雷数量'
  4.     # 生成地雷坐标
  5.     mines = []
  6.     while len(mines) < amount:
  7.         mine = (random.randrange(co_x),random.randrange(co_y))
  8.         if mine not in mines:
  9.             mines.append(mine)
  10.     # 根据mines生成地图
  11.     mineMap = [['M' if (i,j) in mines else 0 for j in range(co_x)] for i in range(co_y)]
  12.     # 把地雷周围的数字 += 1
  13.     for y,x in mines:  
  14.         for mo_y in range(0 if y-1<0 else y-1,10 if y+2>10 else y+2):
  15.             for mo_x in range(0 if x-1<0 else x-1,10 if x+2>10 else x+2):
  16.                 if (mo_y,mo_x) not in mines:
  17.                     mineMap[mo_y][mo_x] += 1
  18.     print(mines)
  19.     return mineMap
  20. for x in mineGame(10,10):
  21.     print('  '.join(map(str,x)))
  22. # result
  23. 1  M  1  0  0  0  1  M  2  1
  24. 1  1  2  1  1  0  2  2  3  M
  25. 0  0  1  M  1  0  1  M  2  1
  26. 1  1  1  1  1  0  1  1  1  0
  27. M  2  1  0  0  0  0  0  0  0
  28. 2  M  1  0  0  0  0  0  1  1
  29. 1  1  1  0  0  0  1  2  3  M
  30. 0  0  0  0  0  0  1  M  M  2
  31. 0  0  0  0  0  0  1  2  2  1
  32. 0  0  0  0  0  0  0  0  0  0
复制代码

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3

查看全部评分

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

使用道具 举报

发表于 2018-2-5 16:41:43 | 显示全部楼层
  1. def Num(l):
  2. #l为10*10的列表,有雷的位置元素为'M',L为12*12的列表
  3.     L=[[0]*12]*12
  4.     for i in range(12):
  5.         if 1<=i<=10:
  6.             L[i]=[0]+l[i-1]+[0]
  7.     for i in range(1,11):
  8.         for j in range(1,11):
  9.             if L[i][j]!='M':
  10.                 for k in range(-1,2):
  11.                     L[i][j] += L[i+k][j-1:j+2].count('M')
  12.                     l[i-1][j-1]=L[i][j]
  13.     for each in l:
  14.         print(each)
  15. l=[[0,0,0,0,0,0,0,0,0,0],[0,0,0,0,'M','M',0,0,0,0],[0,0,0,0,'M',0,0,0,0,0],[0,0,0,0,'M','M',0,0,0,0],[0,0,'M',0,0,0,0,0,0,0],[0,0,'M',0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0],[0,0,0,0,'M','M',0,0,0,0],[0,'M',0,0,0,0,'M',0,0,0],['M',0,0,0,0,0,0,0,0,0]]
  16. Num(l)
复制代码

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3

查看全部评分

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

使用道具 举报

发表于 2018-2-5 17:46:02 | 显示全部楼层
  1. list1=([0,0,0,0,0,0,0,0,0,0],
  2.        [0,0,0,0,'m','m',0,0,0,0],
  3.        [0,0,0,0,'m',0,0,0,0,0],
  4.        [0,0,0,0,'m','m',0,0,0,0],
  5.        [0,0,'m',0,0,0,0,0,0,0],
  6.        [0,0,'m',0,0,0,0,0,0,0],
  7.        [0,0,0,0,0,0,0,0,0,0],
  8.        [0,0,0,0,'m','m',0,0,0,0],
  9.        [0,'m',0,0,0,0,'m',0,0,0],
  10.        ['m',0,0,0,0,0,0,0,0,0])
  11. for i in range (10):
  12.     for j in range(10):
  13.         if i <9:
  14.             if list1[i][j]=='m':
  15.                 if list1[i-1][j-1]!='m':
  16.                     list1[i-1][j-1]=list1[i-1][j-1]+1
  17.                 if list1[i-1][j]!='m':
  18.                     list1[i-1][j]+=1
  19.                 if list1[i-1][j+1]!='m':
  20.                     list1[i-1][j+1]+=1
  21.                 if list1[i][j-1]!='m':
  22.                     list1[i][j-1]+=1
  23.                 if list1[i][j+1]!='m':
  24.                     list1[i][j+1]+=1
  25.                 if list1[i+1][j-1]!='m':
  26.                     list1[i+1][j-1]+=1
  27.                 if list1[i+1][j]!='m':
  28.                     list1[i+1][j]+=1
  29.                 if list1[i+1][j+1]!='m':
  30.                     list1[i+1][j+1]+=1
  31.         if i ==9:
  32.             if list1[i][j]=='m':
  33.                 if list1[i-1][j-1]!='m':
  34.                     list1[i-1][j-1]+=1
  35.                 if list1[i-1][j]!='m':
  36.                     list1[i-1][j]+=1
  37.                 if list1[i-1][j+1]!='m':
  38.                     list1[i-1][j+1]+=1
  39.                 if list1[i][j-1]!='m':
  40.                     list1[i][j-1]+=1
  41.                 if list1[i][j+1]!='m':
  42.                     list1[i][j+1]+=1
  43.             
  44.             
  45.          
  46. for t in list1:
  47.     print(t)
  48.         
复制代码

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3

查看全部评分

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

使用道具 举报

发表于 2018-2-5 20:37:08 | 显示全部楼层
告诉我地雷的位置,那我假设输入是坐标索引吧
想不到巧妙的法子,
直接在全是0的二维列表里面放地雷得了
每个地雷周围8格+1
  1. def fun(positions, shape=(10, 10)):
  2.     matrix = [[0 for i in range(shape[1])] for j in range(shape[0])]
  3.     around = lambda x,y: ((i, j) for i in range(x-1, x+2)
  4.                           for j in range(y-1, y+2))
  5.    
  6.     for pos in positions:
  7.         matrix[pos[0]][pos[1]] = 'M'
  8.         for x, y in around(*pos):
  9.             if shape[0] > x >= 0 and shape[1] > y >= 0:
  10.                 try:
  11.                     matrix[x][y] += 1
  12.                 except TypeError:
  13.                     continue
  14.     return matrix

  15. m = [(1,4), (1,5), (2,4), (3,4), (3,5), (4,2),
  16.       (5,2), (7,4), (7,5), (8,1), (8,6), (9,0)]


  17. if __name__ == "__main__":
  18.     [print(*i) for i in fun(m)]

  19. ##0 0 0 1 2 2 1 0 0 0
  20. ##0 0 0 2 M M 1 0 0 0
  21. ##0 0 0 3 M 5 2 0 0 0
  22. ##0 1 1 3 M M 1 0 0 0
  23. ##0 2 M 3 2 2 1 0 0 0
  24. ##0 2 M 2 0 0 0 0 0 0
  25. ##0 1 1 2 2 2 1 0 0 0
  26. ##1 1 1 1 M M 2 1 0 0
  27. ##2 M 1 1 2 3 M 1 0 0
  28. ##M 2 1 0 0 1 1 1 0 0
复制代码

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3

查看全部评分

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

使用道具 举报

发表于 2018-2-6 02:47:34 | 显示全部楼层
#-*- coding:utf-8 -*-
myList = [([0] * 10) for i in range(10)]

myList[1][4],myList[1][5],myList[2][4],myList[3][4],myList[3][5],myList[4][2],myList[5][2],myList[7][4],myList[7][5],myList[8][1],myList[8][6],myList[9][0]='M'*12
for i in range(10):
    for j in range(10):
        if myList[i][j]!='M':
            pass
        elif i==9 and j==0:
            if myList[i - 1][0] != 'M':
                myList[i-1][j]+=1
            if myList[i-1][j+1]!='M':
                myList[i-1][j+1]+=1
            if myList[i][j + 1] != 'M':
                myList[i][j+1]+=1
        else:
            if myList[i - 1][j - 1] != 'M':
                myList[i - 1][j-1]+=1
            if myList[i - 1][j] != 'M':
                myList[i - 1][j]+=1
            if myList[i - 1][j + 1] != 'M':
                myList[i - 1][j+1]+=1
            if myList[i][j - 1] != 'M':
                myList[i][j-1]+=1
            if myList[i][j + 1] != 'M':
                myList[i][j+1]+=1
            if myList[i + 1][j - 1] != 'M':
                myList[i+1][j-1]+=1
            if myList[i + 1][j] != 'M':
                myList[i + 1][j]+=1
            if myList[i + 1][j + 1] != 'M':
                myList[i + 1][j+1]+=1

for i in range(10):
    print(myList[i])

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3

查看全部评分

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

使用道具 举报

发表于 2018-2-7 00:11:50 | 显示全部楼层
  1. def main():
  2.     minefield = [
  3.         ['', '', '', '', '', '', '', '', '', ''],
  4.         ['', '', '', '', 'M', 'M', '', '', '', ''],
  5.         ['', '', '', '', 'M', '', '', '', '', ''],
  6.         ['', '', '', '', 'M', 'M', '', '', '', ''],
  7.         ['', '', 'M', '', '', '', '', '', '', ''],
  8.         ['', '', 'M', '', '', '', '', '', '', ''],
  9.         ['', '', '', '', '', '', '', '', '', ''],
  10.         ['', '', '', '', 'M', 'M', '', '', '', ''],
  11.         ['', 'M', '', '', '', '', 'M', '', '', ''],
  12.         ['M', '', '', '', '', '', '', '', '', '']
  13.     ]

  14.     for i in range(10):
  15.         for j in range(10):
  16.             if not minefield[i][j]:
  17.                 count = 0
  18.                 for k in range(max(i-1, 0), min(i+2, 10)):
  19.                     for l in range(max(j-1, 0), min(j+2, 10)):
  20.                         if minefield[k][l] == 'M':
  21.                             count += 1
  22.                 minefield[i][j] = count
  23.     for i in range(10):
  24.         for j in range(10):
  25.             if j < 9:
  26.                 print(minefield[i][j], end=' ')
  27.             else:
  28.                 print(minefield[i][j])

  29. if __name__ == '__main__':
  30.     main()
复制代码


运行结果
0 0 0 1 2 2 1 0 0 0
0 0 0 2 M M 1 0 0 0
0 0 0 3 M 5 2 0 0 0
0 1 1 3 M M 1 0 0 0
0 2 M 3 2 2 1 0 0 0
0 2 M 2 0 0 0 0 0 0
0 1 1 2 2 2 1 0 0 0
1 1 1 1 M M 2 1 0 0
2 M 1 1 2 3 M 1 0 0
M 2 1 0 0 1 1 1 0 0

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3

查看全部评分

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

使用道具 举报

发表于 2018-2-7 08:00:57 From FishC Mobile | 显示全部楼层
角落的m怎么处理呢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-2-7 09:08:17 From FishC Mobile | 显示全部楼层
学习学习
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-2-8 11:25:49 | 显示全部楼层
写得有些复杂,等着看高手的答案~

  1. M = 'M'         # 为了好看……
  2. l1 = [[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. r = range(10)           # 已知雷场是10*10
  13. for i in r:
  14.     for j in r:
  15.         if l1[i][j] == M:
  16.             if (i-1) in r and (j-1) in r and l1[i-1][j-1] != M:
  17.                 l1[i-1][j-1] += 1
  18.             if (i-1) in r and l1[i-1][j] != M:
  19.                 l1[i-1][j] += 1
  20.             if (i-1) in r and (j+1) in r and l1[i-1][j+1] != M:
  21.                 l1[i-1][j+1] += 1
  22.             if (j-1) in r and l1[i][j-1] != M:
  23.                 l1[i][j-1] += 1
  24.             if (j+1) in r and l1[i][j+1] != M:
  25.                 l1[i][j+1] += 1
  26.             if (i+1) in r and (j-1) in r and l1[i+1][j-1] != M:
  27.                 l1[i+1][j-1] += 1
  28.             if (i+1) in r and l1[i+1][j] != M:
  29.                 l1[i+1][j] += 1
  30.             if (i+1) in r and (j+1) in r and l1[i+1][j+1] != M:
  31.                 l1[i+1][j+1] += 1

  32. for i in r:
  33.     for j in r:
  34.         print(l1[i][j], end='     ')
  35.     print('\n')
复制代码


结果:

0     0     0     1     2     2     1     0     0     0     

0     0     0     2     M     M     1     0     0     0     

0     0     0     3     M     5     2     0     0     0     

0     1     1     3     M     M     1     0     0     0     

0     2     M     3     2     2     1     0     0     0     

0     2     M     2     0     0     0     0     0     0     

0     1     1     2     2     2     1     0     0     0     

1     1     1     1     M     M     2     1     0     0     

2     M     1     1     2     3     M     1     0     0     

M     2     1     0     0     1     1     1     0     0

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3

查看全部评分

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

使用道具 举报

发表于 2018-2-9 08:15:04 From FishC Mobile | 显示全部楼层
塔利班 发表于 2018-2-5 16:41

大佬代码写的漂亮啊!学习了!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-2-9 09:07:14 | 显示全部楼层
  1. n = 10

  2. board = [[0 for i in range(n)] for j in range(n)]

  3. board[1][4] = "M"
  4. board[1][5] = "M"
  5. board[2][4] = "M"
  6. board[3][4] = "M"
  7. board[3][5] = "M"
  8. board[4][2] = "M"
  9. board[5][2] = "M"
  10. board[7][4] = "M"
  11. board[7][5] = "M"
  12. board[8][1] = "M"
  13. board[8][6] = "M"
  14. board[9][0] = "M"

  15. for row in range(n):
  16.     for col in range(n):
  17.         count = 0

  18.         if board[row][col] == "M":
  19.             continue

  20.         # Upper-left corner
  21.         elif row == 0 and col == 0:
  22.             if board[row][col+1] == "M":
  23.                 count += 1

  24.             if board[row+1][col] == "M":
  25.                 count += 1

  26.             if board[row+1][col+1] == "M":
  27.                 count += 1

  28.             board[row][col] = count

  29.         # Bottom-left corner
  30.         elif row == n-1 and col == 0:
  31.             if board[row][col+1] == "M":
  32.                 count += 1

  33.             if board[row-1][col] == "M":
  34.                 count += 1

  35.             if board[row-1][col+1] == "M":
  36.                 count += 1

  37.             board[row][col] = count

  38.         # Upper-right corner
  39.         elif row == 0 and col == n-1:
  40.             if board[row][col-1] == "M":
  41.                 count += 1

  42.             if board[row+1][col] == "M":
  43.                 count += 1

  44.             if board[row+1][col-1] == "M":
  45.                 count += 1

  46.             board[row][col] = count

  47.         # Bottom-right corner
  48.         elif row == n-1 and col == n-1:
  49.             if board[row][col-1] == "M":
  50.                 count += 1

  51.             if board[row-1][col] == "M":
  52.                 count += 1

  53.             if board[row-1][col-1] == "M":
  54.                 count += 1

  55.             board[row][col] = count

  56.         # Top
  57.         elif row == 0:
  58.             if board[row+1][col-1] == "M":
  59.                 count += 1

  60.             if board[row+1][col] == "M":
  61.                 count += 1

  62.             if board[row+1][col+1] == "M":
  63.                 count += 1

  64.             if board[row][col-1] == "M":
  65.                 count += 1

  66.             if board[row][col+1] == "M":
  67.                 count += 1

  68.             board[row][col] = count

  69.         # Bottom
  70.         elif row == n-1:
  71.             if board[row-1][col-1] == "M":
  72.                 count += 1

  73.             if board[row-1][col] == "M":
  74.                 count += 1

  75.             if board[row-1][col+1] == "M":
  76.                 count += 1

  77.             if board[row][col-1] == "M":
  78.                 count += 1

  79.             if board[row][col+1] == "M":
  80.                 count += 1

  81.             board[row][col] = count

  82.         # Left
  83.         elif col == 0:
  84.             if board[row-1][col+1] == "M":
  85.                 count += 1

  86.             if board[row][col+1] == "M":
  87.                 count += 1

  88.             if board[row+1][col+1] == "M":
  89.                 count += 1

  90.             if board[row-1][col] == "M":
  91.                 count += 1

  92.             if board[row+1][col] == "M":
  93.                 count += 1

  94.             board[row][col] = count

  95.         # Right
  96.         elif col == n-1:
  97.             if board[row-1][col-1] == "M":
  98.                 count += 1

  99.             if board[row][col-1] == "M":
  100.                 count += 1

  101.             if board[row+1][col-1] == "M":
  102.                 count += 1

  103.             if board[row-1][col] == "M":
  104.                 count += 1

  105.             if board[row+1][col] == "M":
  106.                 count += 1

  107.             board[row][col] = count

  108.         else:
  109.             if board[row-1][col-1] == "M":
  110.                 count += 1

  111.             if board[row-1][col] == "M":
  112.                 count += 1

  113.             if board[row-1][col+1] == "M":
  114.                 count += 1

  115.             if board[row][col-1] == "M":
  116.                 count += 1

  117.             if board[row][col+1] == "M":
  118.                 count += 1

  119.             if board[row+1][col-1] == "M":
  120.                 count += 1

  121.             if board[row+1][col] == "M":
  122.                 count += 1

  123.             if board[row+1][col+1] == "M":
  124.                 count += 1

  125.             board[row][col] = count

  126. for each in board:
  127.     print(*each)
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-2-9 15:20:44 | 显示全部楼层

def Num(l):
#l为10*10的列表,有雷的位置元素为'M',L为12*12的列表
    L=[[0]*12]*12
    for i in range(12):
        if 1<=i<=10:
            L=[0]+l[i-1]+[0]
    for i in range(1,11):
        for j in range(1,11):
            if L[j]!='M':
                for k in range(-1,2):
                    L[j] += L[i+k][j-1:j+2].count('M')
                    l[i-1][j-1]=L[j]
    for each in l:
        for i in each:
            print(i,end ='')
        print(end='\n')
        #print(each)
l=[[0,0,0,0,0,0,0,0,0,0],[0,0,0,0,'M','M',0,0,0,0],[0,0,0,0,'M',0,0,0,0,0],[0,0,0,0,'M','M',0,0,0,0],[0,0,'M',0,0,0,0,0,0,0],[0,0,'M',0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0],[0,0,0,0,'M','M',0,0,0,0],[0,'M',0,0,0,0,'M',0,0,0],['M',0,0,0,0,0,0,0,0,0]]
Num(l)
喜欢你的程序,在你的程序基础上稍作修改美观点。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-2-9 15:35:18 | 显示全部楼层
大头目 发表于 2018-2-9 08:15
大佬代码写的漂亮啊!学习了!

谢谢,我视频都没看到一半,也是新手,慢慢学习中,经常来学习真好,马上过年回家了,不能总上论坛了,
把书和视频拿回去看看~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-2-9 15:37:09 | 显示全部楼层
冰封雪舞 发表于 2018-2-9 15:20
def Num(l):
#l为10*10的列表,有雷的位置元素为'M',L为12*12的列表
    L=[[0]*12]*12

刚好有思路回避边角而已,还是新手,经常和大家来学习才是硬道理
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-24 10:00

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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