首页 > 解决方案 > 坚持以下问题的python代码

问题描述

为以下编写python代码(2.7版本)并解释逻辑,因为我不明白请解释。

八个房子,以细胞表示,排成一条直线。每天每个细胞都与它的相邻细胞(邻居)竞争。整数值 1 表示活跃单元格,值 0 表示不活跃单元格。如果单元格两侧的邻居要么活跃要么不活跃,则该单元格在第二天变为不活跃单元格;否则单元格变为活动单元格。两端的两个单元格有一个相邻的单元格,因此假设对面的未占用空间为非活动单元格。即使在更新单元格状态后,在更新其他单元格的状态时也要考虑其先前的状态细胞。所有小区的状态信息应该同时更新。

编写一个算法来输出给定天数后细胞的状态。

====================================================

输入

函数/方法的输入由两个参数组成:

states ,表示单元格当前状态的整数列表;

天 ; 表示天数的整数。

输出

返回表示给定天数后单元格状态的整数列表。

笔记

列表状态的元素仅包含 0 和 1。

TESTCASES 1:
INPUT:
[1,0,0,0,0,1,0,0],1
EXPECTED RETURN VALUE:
[0,1,0,0,1,0,1,0]

TESTCASE 2:
INPUT:
[1,1,1,0,1,1,1,1,],2
EXPECTED RETURN VALUE:
[0,0,0,0,0,1,1,0]

==================================================== =================

def cellCompete(states,days):

    #write your code logic with explanation

    pass

==================================================== =================

我尝试使用以下代码,但它给出了错误的输出:

def cellCompete(c,d):
     for _ in range(d):
          for i in range(8):
                n=c[i]
                if i>0 and i<7:
                    c[i]=0 if c[i+1]==a else 1
                elif i==0:
                                    c[i]=0 if c[i+1]==0 else 1
                            else:
                                      c[i]=0 if a==0 else 1
                    a=n
          return c;

标签: pythonpython-2.7

解决方案


您可以利用lis[-1]环绕的列表的索引来访问最后一个元素。

此函数在末尾添加一个额外的非活动单元格,以便检查列表末尾的相邻单元格。

def cellCompete(c, d):
    c = c[:]
    for _ in range(d):
        q = [0] * len(c)
        c.append(0)
        for index in range(len(q)):
            next_state = 0 if c[index - 1] == c[index + 1] else 1
            q[index] = next_state

        c = q
    return c

作为两个测试用例输出。


推荐阅读