【问题标题】:How to implement the concept of cellular automata in python如何在python中实现元胞自动机的概念
【发布时间】:2015-11-24 17:51:10
【问题描述】:

我在 python 方面相当新(一般来说,编程,刚开始 2 个月前)。我的任务是创建一个程序,该程序采用用户起始字符串(即“11001100”)并根据一组规则打印每一代。然后它在重复用户开始字符串时停止。但是,我什至不知道从哪里开始。我对元胞自动机的概念有模糊的了解,因此不知道如何将其实现到脚本中。

理想情况下,它将获取用户输入字符串“11001100”(gen0)并查看我创建的规则集并将其转换为“11001100”将是“00110011”(gen1),然后将其再次转换为(gen3)并再次返回(gen4),直到返回到用户提供的原始输入(gen0)。我的规则集如下:

print("What is your starting string?")

SS = input()
gen = [SS]
while 1:
    for i in range(len(SS)):
        if gen[-1] in gen[:-2]:
            break
    for g in gen:
        print(g)


newstate = {
    #this is used to convert the string. we break up the users string into threes. i.e if user enters 11001100, we start with the left most digit "1" and look at its neighbors (x-1 and x+1) or in this case "0" and "1". Using these three numbers we compare it to the chart below:
    '000': 1 ,
    '001': 1 ,
    '010': 0 ,
    '011': 0 ,
    '100': 1 ,
    '101': 1 ,
    '110': 0 ,
    '111': 0 ,
}

我将不胜感激任何帮助或进一步解释/虚拟证明解释如何使其工作。

【问题讨论】:

  • 请修正您的格式和缩进,此代码目前尚不清楚您要实现的目标。技巧提示,复制并粘贴您的代码,然后将其全部突出显示并按ctrl+k
  • 很抱歉。我对此还是陌生的。我删除了我的代码,只是用文字解释了我想要实现的目标。
  • 您最好发布您尝试过的代码(只需确保其格式正确),以便我们可以帮助您并向您展示哪里出错并修复它。 SO 不是代码编写服务
  • 我尝试过的代码在技术上并不是已经“尝试过”的代码。我不知道如何完全实现对我的要求。在我学习 Python 的过程中,我基于目前所知道的知识构建了更多的基本结构。
  • 我已经重新添加了我认为对我提出的要求的基本结构化构建块(最好的表达方式)。我真的不知道从这里去哪里,也没有给我任何关于这些材料的讲座。我只是收到一张纸,告诉我“在这里编码”......对于大学的 100 级课程,其重点是“没有任何编码经验”的学生,这有点超出我的掌握完成。

标签: python


【解决方案1】:

假设newstate 是一个有效的字典,其中键/值对对应于您的状态替换(如果您希望100 转换为011newstate 将具有newstate['100'] == '011'),您可以这样做拆分字符串的列表推导:

changed = ''.join(newstate[c] for c in prev)

其中prev 是您之前的状态字符串。即:

>>> newstate = {'1':'0','0':'1'}
>>> ''.join(newstate[c] for c in '0100101')
'1011010'

然后您可以使用此列表组合通过在列表推导中调用自身来更改字符串本身:

>>> changed = '1010101'
>>> changed = ''.join(newstate[c] for c in changed)
>>> changed
'0101010'

您的原始代码中有基本流程,您只需要对其进行改进。伪代码如下所示:

newstate = dict with key\value mapping pairs
original = input

changed = original->after changing

while changed != original:
    changed = changed->after changing

print changed

【讨论】:

    【解决方案2】:

    最简单的方法是使用 python 正则表达式模块 re.sub() 中的 re.sub() 方法。

        import re
    
    def replace_rule(string, new, pattern):
        return re.sub(pattern, new, string)
    
    def replace_example(string):
        pattern = r"100"
        replace_with = "1"
        return re.sub(pattern, replace_with, string)
    
       replace_example("1009")
    => '19'
       replace_example("1009100")
    => '191'
    

    正则表达式是一种将字符串与某些常规模式匹配的方法,并对它们进行某些操作,例如 sub,它可以查找和替换字符串中的模式。这是一个链接:https://docs.python.org/3/library/re.html

    【讨论】:

    • 我不知道 Python 有正则表达式!我对正则表达式只有一点经验(到目前为止我在 Perl 中学到的东西)。我将在 Python 中摆弄正则表达式并尝试实现我所知道的。
    猜你喜欢
    • 1970-01-01
    • 2011-07-08
    • 2012-02-26
    • 1970-01-01
    • 2021-05-09
    • 2012-01-24
    • 2022-11-02
    • 1970-01-01
    • 2020-07-25
    相关资源
    最近更新 更多