파이톤이 구현한 자기설명 스크립트 공유 생성 (재미있는 프로그램)
, , 125 , 33 “ ”,29 “2”,5 “3”,3 “ ”,3 “5”,2 “ ”,2 “ ”,2 “ ”,2 “ ”,2 “ ”,2 “ ”,2 “ ”,2 “ ”,2 “ ”,2 “ ”,2 “ ”,2 “1”,2 “ ”,2 “ ”,2 “ ”,2 “9”,2 “ ”,2 “ ”,2 “ ”,2 “ ”,2 “ ”,2 “ ”,2 “ ”,2 “ ”,2 “ ”,2 “ ”。
이 말은 내가 파이썬 스크립트로 생성한 것으로 생성 원리는 대체로 다음과 같다.
1. 문장의 각 내용이 자신이 어느 부위에 나타나야 하는지 알 수 있도록 템플릿을 제시한다.2. 현재 정보에 따라 문장을 생성한다.3. 현재 문장을 입력으로 하고 2단계 조작을 다시 수행한다.4. 문장의 각 부분에 대한 정보가 정확할 때까지.
간단하게 말하면 끊임없이 반복해서 수정하는 과정이다.
그 중에서 주의해야 할 것은 매번 교체할 때 가능한 한 한 한 곳만 바꾸어 두 곳의 변화가 서로 영향을 주고 사순환을 초래하지 않도록 해야 한다는 것이다.또 문장 중 여러 곳을 수정해야 할 경우 가능한 한 무작위로 한 곳을 골라 수정하고 일정한 순서대로 수정하지 않는 것도 사순환에 빠질 위험을 줄이기 위한 것이다.
그러나 그렇다고 해서 어떤 경우에도 사순환에 빠질 수 있다. 예를 들어 어느 한 걸음에 다음과 같은 문장을 얻게 된다면 다음과 같다.
2 3 “2”。
위의 이 말은 분명히 잘못된 것이다. 왜냐하면 그중에 단지 두 개의 '2' 만 있기 때문이다.그럼 우리 그'3'을'2'로 바꾸면 되는 거 아니야?만약 우리가 이렇게 바꾸면 문장은 다음과 같이 변할 것이다.
2 2 “2”。
이때 문장에는 또 세 개의'2'가 포함되어 있다.이런 문장은 어떻게 고쳐도 사순환에 빠지기 때문에 간단하게 정확한 자기묘사 문장으로 바꿀 수 없을 것 같다.
마지막으로, 내가 맨 위에 있는 자기 묘사 문장을 만드는 데 사용한 파이썬 스크립트는 다음과 같다.
# -*- coding: utf-8 -*-
import random
class SelfDesc(object):
ignore_chars = u",。“”"
def __init__(self, template):
self.template = template
self.length = 0
self.detail = ""
self.content = ""
self.chars = ""
self.char_count = {}
self.makeContent()
self.char_count = self.getCharCount()
self.getCharCount()
self.makeContent()
def __str__(self):
return self.content
def makeContent(self):
self.makeDetail()
self.content = self.template.replace(u"{length}", u"%d" % self.length)
.replace(u"{detail}", self.detail)
self.getChars()
def getChars(self):
chars = self.content
for c in self.ignore_chars:
chars = chars.replace(c, "")
self.chars = chars
return chars
def getLength(self):
self.length = len(self.chars)
def getCharCount(self):
d = {}
for c in self.chars:
if c in self.ignore_chars:
continue
d.setdefault(c, 0)
d[c] += 1
return d
def makeDetail(self):
d = self.char_count
items = d.items()
items.sort(key=lambda x: -x[1])
s = []
for c, n in items:
s.append(u"%d “%s”" % (n, c))
self.detail = u",".join(s)
def correct(self):
print "-" * 50
char_count = self.getCharCount()
items = char_count.items()
random.shuffle(items)
for c, n in items:
if n <= 1 and c in self.char_count:
del self.char_count[c]
continue
if self.char_count.get(c) == n:
continue
else:
self.char_count[c] = n
return True
else:
len = self.length
self.getLength()
if len != self.length:
return True
return False
def generate(self):
icount = 0
while self.correct():
icount += 1
self.makeContent()
print u"#%d %s" % (icount, self)
def main():
template = u" , , {length} , {detail}。"
sd = SelfDesc(template)
sd.generate()
print u"%s" % sd
if __name__ == "__main__":
main()
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.