鱼C论坛

 找回密码
 立即注册
查看: 5936|回复: 25

[技术交流] Python习题集(1)Moore Neighbourhood

[复制链接]
发表于 2014-10-10 10:47:11 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 破渔网兜兜 于 2014-10-16 14:42 编辑

今天@bevin 教了一道题,感觉很厉害,大家可以试试
闲着的话,大家来做题吧

题目要求:

黄色方框代表的是鳄鱼坐标,它周围一圈如果有点,代表它是鳄鱼的邻居,然后统计出鳄鱼有几位邻居。比如第一个图,鳄鱼有三个邻居,第二个图,鳄鱼有1个邻居。表格宽度是不定的。

QQ图片20141010104301.jpg


转化为代码表现为:
  1. count_neighbours(((1, 0, 0, 1, 0),
  2.                   (0, 1, 0, 0, 0),
  3.                   (0, 0, 1, 0, 1),
  4.                   (1, 0, 0, 0, 0),
  5.                   (0, 0, 1, 0, 0),), 1, 2) == 3
  6. count_neighbours(((1, 0, 0, 1, 0),
  7.                   (0, 1, 0, 0, 0),
  8.                   (0, 0, 1, 0, 1),
  9.                   (1, 0, 0, 0, 0),
  10.                   (0, 0, 1, 0, 0),), 0, 0) == 1
复制代码


参考答案:

游客,如果您要查看本帖隐藏内容请回复


评分

参与人数 1荣誉 +2 鱼币 +4 贡献 +2 收起 理由
bevin + 2 + 4 + 2 感谢楼主无私奉献!

查看全部评分

本帖被以下淘专辑推荐:

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2014-10-10 15:50:53 | 显示全部楼层
写了快100行- -。


  1. import random

  2. v = [[0, 0, 0, 0, 0],
  3.      [0, 0, 0, 0, 0],
  4.      [0, 0, 0, 0, 0],
  5.      [0, 0, 0, 0, 0],
  6.      [0, 0, 0, 0, 0]]

  7. for i in range(5):
  8.     v[i] = [random.choice([0,2]) for x in v[i]]
  9. a = random.randint(0,4)
  10. b = random.randint(0,4)
  11. c = random.randint(2,5)
  12. d = 0
  13. e = 0
  14. v[a][b] = 4
  15. if c ==2:
  16.         start = b
  17.         end = b+2
  18.         if end >5:
  19.             end =5
  20.         for num in range(0,2):
  21.             if a+num >4:
  22.                 pass
  23.             else:
  24.                 for num2 in  v[a+num][start:end]:
  25.                     if num2 ==2 :
  26.                         d +=1
  27. if c == 3:
  28.         start = b-1
  29.         end = b+2
  30.         if start <-1:
  31.             start=0
  32.         if end >5:
  33.             end =5
  34.         for num in range(0,2):
  35.             if a+num >4:
  36.                 pass
  37.             else:
  38.                 for num2 in  v[a+num][start:end]:
  39.                     if num2 ==2 :
  40.                         d +=1
  41.         for num in range(1,2):
  42.             if a-num <0:
  43.                 pass
  44.             else:
  45.                 for num2 in  v[a-num][start:end]:
  46.                     if num2 ==2 :
  47.                         d +=1
  48. if c ==4:
  49.         start = b
  50.         end = b+4
  51.         if end >5:
  52.             end =5
  53.         for num in range(0,3):
  54.             if a+num >4:
  55.                 pass
  56.             else:
  57.                 for num2 in  v[a+num][start:end]:
  58.                     if num2 ==2 :
  59.                         d +=1

  60. if c == 5:
  61.         start = b-2
  62.         end = b+3
  63.         if start <-1:
  64.             start=0
  65.         if end >5:
  66.             end =5
  67.         for num in range(0,3):
  68.             if a+num >4:
  69.                 pass
  70.             else:
  71.                 for num2 in  v[a+num][start:end]:
  72.                     if num2 ==2 :
  73.                         d +=1
  74.         for num in range(1,3):
  75.             if a-num <0:
  76.                 pass
  77.             else:
  78.                 for num2 in  v[a-num][start:end]:
  79.                     if num2 ==2 :
  80.                         d +=1

  81. print('{0:5} {1:5} {2:5} {3:5} {4:5}'.format(v[0][0], v[0][1], v[0][2], v[0][3], v[0][4]))
  82. print('{0:5} {1:5} {2:5} {3:5} {4:5}'.format(v[1][0], v[1][1], v[1][2], v[1][3], v[1][4]))
  83. print('{0:5} {1:5} {2:5} {3:5} {4:5}'.format(v[2][0], v[2][1], v[2][2], v[2][3], v[2][4]))
  84. print('{0:5} {1:5} {2:5} {3:5} {4:5}'.format(v[3][0], v[3][1], v[3][2], v[3][3], v[3][4]))
  85. print('{0:5} {1:5} {2:5} {3:5} {4:5}'.format(v[4][0], v[4][1], v[4][2], v[4][3], v[4][4]))
  86. print('   鳄鱼家占地面积:%d'%(c*c))
  87. print('   他有%d个小伙伴'%(d))
复制代码



小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-10-10 15:57:58 | 显示全部楼层
wei_Y 发表于 2014-10-10 15:50
写了快100行- -。

bevin 教的,才几行哦。。我贴代码给你看
  1. import itertools
  2. dirctions = list(itertools.product((1,0,-1),(1,0,-1)))
  3. dirctions.remove((0,0))
  4. #print dirctions
  5. data =  (((1,1,1),
  6.      (1,1,1),
  7.      (1,1,1),), 0, 2)

  8. def getnum(data):
  9.     dataset = data[0]
  10.     py = data[1]
  11.     px = data[2]
  12.     count = 0
  13.     for x,y in dirctions:
  14.         try:
  15.             if py+y >= 0 and px + x >= 0:
  16.                 if dataset[py+y][px+x] == 1:
  17.                     count += 1
  18.         except IndexError:
  19.             continue
  20.     return count

  21. print (getnum(data))
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-10-10 15:59:12 | 显示全部楼层
wei_Y 发表于 2014-10-10 15:50
写了快100行- -。

貌似结果不对。。。是不是木有理解题目
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-10-10 16:26:35 | 显示全部楼层
破渔网兜兜 发表于 2014-10-10 15:59
貌似结果不对。。。是不是木有理解题目

结果不对吗,那里不对了,我测试了好久。。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-10-10 16:28:16 | 显示全部楼层
破渔网兜兜 发表于 2014-10-10 15:59
貌似结果不对。。。是不是木有理解题目

我知道了,邻居是固定的,鳄鱼不是固定的。我写的那个邻居和鳄鱼都不固定。。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-10-10 16:33:47 | 显示全部楼层
wei_Y 发表于 2014-10-10 16:28
我知道了,邻居是固定的,鳄鱼不是固定的。我写的那个邻居和鳄鱼都不固定。。

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-10-10 16:34:32 | 显示全部楼层
wei_Y 发表于 2014-10-10 16:28
我知道了,邻居是固定的,鳄鱼不是固定的。我写的那个邻居和鳄鱼都不固定。。

表格是会变的,你这样鳄鱼永远只能在5X5的表格里面了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-10-10 16:37:12 | 显示全部楼层
wei_Y 发表于 2014-10-10 15:50
写了快100行- -。
  1. >>>
  2.     2     2     0     2     0
  3.     0     2     4     0     2
  4.     0     0     0     0     2
  5.     0     0     2     0     0
  6.     2     2     2     0     0
  7.    鳄鱼家占地面积:25
  8.    他有7个小伙伴
  9. >>>
复制代码


你看,鳄鱼的邻居怎么会有7个
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-10-10 16:37:52 | 显示全部楼层
wei_Y 发表于 2014-10-10 15:50
写了快100行- -。

就是跟扫雷一样
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-10-10 16:49:27 | 显示全部楼层
卧槽  Python大神 我来 膜拜下 整个 orz 。。。。。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-10-10 17:06:40 | 显示全部楼层
破渔网兜兜 发表于 2014-10-10 16:37
你看,鳄鱼的邻居怎么会有7个

360截图20141010170440557.jpg

4是鳄鱼,2是邻居。5x5的地方,以4为中心上下左右都扩展2格。
题意不是5x5的总地方,鳄鱼家的面积(2-5)^2,然后在他家面积里的不就是邻居。
难道我理解错了。。

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-10-10 17:10:50 | 显示全部楼层
wei_Y 发表于 2014-10-10 17:06
4是鳄鱼,2是邻居。5x5的地方,以4为中心上下左右都扩展2格。
题意不是5x5的总地方,鳄鱼家的面积(2 ...

只扩展一格,两格,邻居会不会有点远。。题目里面,邻居也不是这么定义额,看两个例子,其实就是跟扫雷一样,点一个点,周围没有1的是安全点,有1的是地雷,跟面积没关系,只是坐标,就是你定义了一个点,它前后上下一格内,有多少个1
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-10-10 17:14:38 | 显示全部楼层
破渔网兜兜 发表于 2014-10-10 17:10
只扩展一格,两格,邻居会不会有点远。。题目里面,邻居也不是这么定义额,看两个例子,其实就是跟扫雷一 ...

好吧。我理解错了。。

  1. import random

  2. v = [[2, 0, 0, 2, 0],
  3.      [0, 2, 0, 0, 0],
  4.      [0, 0, 2, 0, 2],
  5.      [2, 0, 0, 0, 0],
  6.      [0, 0, 2, 0, 0]]

  7. a = random.randint(0,4)
  8. b = random.randint(0,4)
  9. c = 3
  10. d = 0
  11. v[a][b] = 4
  12. if c == 3:
  13.         start = b-1
  14.         end = b+2
  15.         if start <-1:
  16.             start=0
  17.         if end >5:
  18.             end =5
  19.         for num in range(0,2):
  20.             if a+num >4:
  21.                 pass
  22.             else:
  23.                 for num2 in  v[a+num][start:end]:
  24.                     if num2 ==2 :
  25.                         d +=1
  26.         for num in range(1,2):
  27.             if a-num <0:
  28.                 pass
  29.             else:
  30.                 for num2 in  v[a-num][start:end]:
  31.                     if num2 ==2 :
  32.                         d +=1

  33. print('{0:5} {1:5} {2:5} {3:5} {4:5}'.format(v[0][0], v[0][1], v[0][2], v[0][3], v[0][4]))
  34. print('{0:5} {1:5} {2:5} {3:5} {4:5}'.format(v[1][0], v[1][1], v[1][2], v[1][3], v[1][4]))
  35. print('{0:5} {1:5} {2:5} {3:5} {4:5}'.format(v[2][0], v[2][1], v[2][2], v[2][3], v[2][4]))
  36. print('{0:5} {1:5} {2:5} {3:5} {4:5}'.format(v[3][0], v[3][1], v[3][2], v[3][3], v[3][4]))
  37. print('{0:5} {1:5} {2:5} {3:5} {4:5}'.format(v[4][0], v[4][1], v[4][2], v[4][3], v[4][4]))
  38. print('   鳄鱼有%d个小伙伴'%(d))
复制代码

貌似还是有点长。。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-10-17 10:59:30 | 显示全部楼层
{:1_1:}
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

头像被屏蔽
发表于 2014-11-1 07:36:33 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-1-6 16:15:29 | 显示全部楼层
牛逼啊,赞一个!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-1-7 15:06:22 | 显示全部楼层
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2015-1-7 22:06:56 | 显示全部楼层
来看看!!!!!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-1-7 23:33:52 | 显示全部楼层
求什么呢?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-7 19:45

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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