鱼C论坛

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

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

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

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

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

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

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

题目要求:

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

QQ图片20141010104301.jpg


转化为代码表现为:
count_neighbours(((1, 0, 0, 1, 0),
                  (0, 1, 0, 0, 0),
                  (0, 0, 1, 0, 1),
                  (1, 0, 0, 0, 0),
                  (0, 0, 1, 0, 0),), 1, 2) == 3
count_neighbours(((1, 0, 0, 1, 0),
                  (0, 1, 0, 0, 0),
                  (0, 0, 1, 0, 1),
                  (1, 0, 0, 0, 0),
                  (0, 0, 1, 0, 0),), 0, 0) == 1

参考答案:

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


评分

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

查看全部评分

本帖被以下淘专辑推荐:

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

使用道具 举报

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

v = [[0, 0, 0, 0, 0],
     [0, 0, 0, 0, 0],
     [0, 0, 0, 0, 0],
     [0, 0, 0, 0, 0],
     [0, 0, 0, 0, 0]]

for i in range(5):
    v[i] = [random.choice([0,2]) for x in v[i]]
a = random.randint(0,4)
b = random.randint(0,4)
c = random.randint(2,5)
d = 0
e = 0
v[a][b] = 4
if c ==2:
        start = b
        end = b+2
        if end >5:
            end =5
        for num in range(0,2):
            if a+num >4:
                pass
            else:
                for num2 in  v[a+num][start:end]:
                    if num2 ==2 :
                        d +=1
if c == 3:
        start = b-1
        end = b+2
        if start <-1:
            start=0
        if end >5:
            end =5
        for num in range(0,2):
            if a+num >4:
                pass
            else:
                for num2 in  v[a+num][start:end]:
                    if num2 ==2 :
                        d +=1
        for num in range(1,2):
            if a-num <0:
                pass
            else:
                for num2 in  v[a-num][start:end]:
                    if num2 ==2 :
                        d +=1
if c ==4:
        start = b
        end = b+4
        if end >5:
            end =5
        for num in range(0,3):
            if a+num >4:
                pass
            else:
                for num2 in  v[a+num][start:end]:
                    if num2 ==2 :
                        d +=1

if c == 5:
        start = b-2
        end = b+3
        if start <-1:
            start=0
        if end >5:
            end =5
        for num in range(0,3):
            if a+num >4:
                pass
            else:
                for num2 in  v[a+num][start:end]:
                    if num2 ==2 :
                        d +=1
        for num in range(1,3):
            if a-num <0:
                pass
            else:
                for num2 in  v[a-num][start:end]:
                    if num2 ==2 :
                        d +=1

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]))
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]))
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]))
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]))
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]))
print('   鳄鱼家占地面积:%d'%(c*c))
print('   他有%d个小伙伴'%(d))


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

使用道具 举报

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

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

def getnum(data):
    dataset = data[0]
    py = data[1]
    px = data[2]
    count = 0
    for x,y in dirctions:
        try:
            if py+y >= 0 and px + x >= 0:
                if dataset[py+y][px+x] == 1:
                    count += 1
        except IndexError:
            continue
    return count

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

使用道具 举报

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

貌似结果不对。。。是不是木有理解题目
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

结果不对吗,那里不对了,我测试了好久。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

我知道了,邻居是固定的,鳄鱼不是固定的。我写的那个邻居和鳄鱼都不固定。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

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

使用道具 举报

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

表格是会变的,你这样鳄鱼永远只能在5X5的表格里面了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

你看,鳄鱼的邻居怎么会有7个
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

就是跟扫雷一样
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-10-10 16:49:27 | 显示全部楼层
卧槽  Python大神 我来 膜拜下 整个 orz 。。。。。
想知道小甲鱼最近在做啥?请访问 -> 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,然后在他家面积里的不就是邻居。
难道我理解错了。。

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

使用道具 举报

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

好吧。我理解错了。。
import random

v = [[2, 0, 0, 2, 0],
     [0, 2, 0, 0, 0],
     [0, 0, 2, 0, 2],
     [2, 0, 0, 0, 0],
     [0, 0, 2, 0, 0]]

a = random.randint(0,4)
b = random.randint(0,4)
c = 3
d = 0
v[a][b] = 4
if c == 3:
        start = b-1
        end = b+2
        if start <-1:
            start=0
        if end >5:
            end =5
        for num in range(0,2):
            if a+num >4:
                pass
            else:
                for num2 in  v[a+num][start:end]:
                    if num2 ==2 :
                        d +=1
        for num in range(1,2):
            if a-num <0:
                pass
            else:
                for num2 in  v[a-num][start:end]:
                    if num2 ==2 :
                        d +=1

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]))
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]))
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]))
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]))
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]))
print('   鳄鱼有%d个小伙伴'%(d))
貌似还是有点长。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-10-17 10:59:30 | 显示全部楼层
{:1_1:}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

头像被屏蔽
发表于 2014-11-1 07:36:33 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-1-6 16:15:29 | 显示全部楼层
牛逼啊,赞一个!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-1-7 15:06:22 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-1-7 22:06:56 | 显示全部楼层
来看看!!!!!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-1-7 23:33:52 | 显示全部楼层
求什么呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-22 16:43

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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