欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python實(shí)現(xiàn)的生成自我描述腳本分享(很有意思的程序)

 更新時(shí)間:2014年07月18日 11:05:34   作者:oldj  
這篇文章主要介紹了Python實(shí)現(xiàn)的生成自我描述腳本分享,很有意思的程序,繞的人有點(diǎn)頭暈,需要的朋友參考下吧

自我描述的語(yǔ)句指這樣一種語(yǔ)句:它的內(nèi)容就是對(duì)它本身的描述。(廢話……)比如下面這句句子:

復(fù)制代碼 代碼如下:

這是一段自我描述的語(yǔ)句,除了標(biāo)點(diǎn)符號(hào)外,它共包含125個(gè)字符,其中33個(gè)“個(gè)”,29個(gè)“2”,5個(gè)“3”,3個(gè)“符”,3個(gè)“5”,2個(gè)“一”,2個(gè)“它”,2個(gè)“包”,2個(gè)“的”,2個(gè)“標(biāo)”,2個(gè)“了”,2個(gè)“我”,2個(gè)“外”,2個(gè)“含”,2個(gè)“中”,2個(gè)“是”,2個(gè)“1”,2個(gè)“段”,2個(gè)“點(diǎn)”,2個(gè)“描”,2個(gè)“9”,2個(gè)“字”,2個(gè)“這”,2個(gè)“句”,2個(gè)“除”,2個(gè)“自”,2個(gè)“語(yǔ)”,2個(gè)“共”,2個(gè)“述”,2個(gè)“號(hào)”,2個(gè)“其”。

這句話是我用一段 Python 腳本生成的,生成原理大致如下:

1、給出一個(gè)模板,讓句子的各個(gè)內(nèi)容知道自己該出現(xiàn)在哪個(gè)部位;
2、根據(jù)當(dāng)前信息,生成句子;
3、將當(dāng)前句子作為輸入,再次執(zhí)行第 2 步的操作;
4、直到句子各部分內(nèi)容的信息都正確。

簡(jiǎn)單來(lái)說(shuō),就是一個(gè)不斷迭代修正的過(guò)程。

其中需要注意的是,每次迭代時(shí)應(yīng)該盡量只改動(dòng)一個(gè)地方,以免兩處同時(shí)變化相互影響,造成死循環(huán);另外,如果句子中有多處地方需要修正,盡量隨機(jī)選取一處進(jìn)行修正,而不要按一定順序進(jìn)行修正,同樣是為了減少陷入死循環(huán)的風(fēng)險(xiǎn)。

不過(guò),即使如此,某些情況下還是有可能陷入死循環(huán),比如如果某一步得到了下面這樣的句子:

復(fù)制代碼 代碼如下:

這句很 2 的話包含 3 個(gè)“2”。

上面這句話明顯是錯(cuò)誤的,因?yàn)槠渲兄挥袃蓚€(gè)“2”。那么,我們把那個(gè)“3”改為“2”,是不是就對(duì)了呢?很容易發(fā)現(xiàn),如果我們做了這樣的改動(dòng)之后,句子將變成:

復(fù)制代碼 代碼如下:

這句很 2 的話包含 2 個(gè)“2”。

這時(shí),句子中又包含三個(gè)“2”了。像這樣的句子就似乎無(wú)法簡(jiǎn)單地改為正確的自我描述語(yǔ)句,因?yàn)闊o(wú)論如何改都會(huì)陷入死循環(huán)。

最后,我用來(lái)生成最上面的那句自我描述語(yǔ)句的 Python 腳本如下:

# -*- 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個(gè)“%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"這是一段自我描述的語(yǔ)句,除了標(biāo)點(diǎn)符號(hào)外,它共包含{length}個(gè)字符,其中{detail}。"
  sd = SelfDesc(template)
  sd.generate()
  print u"%s" % sd


if __name__ == "__main__":
  main()

相關(guān)文章

  • Numpy中的數(shù)組搜索中np.where方法詳細(xì)介紹

    Numpy中的數(shù)組搜索中np.where方法詳細(xì)介紹

    這篇文章主要介紹了Numpy中的數(shù)組搜索中np.where方法詳細(xì)介紹,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-01-01
  • dataframe 按條件替換某一列中的值方法

    dataframe 按條件替換某一列中的值方法

    今天小編就為大家分享一篇dataframe 按條件替換某一列中的值方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-01-01
  • python實(shí)現(xiàn)人機(jī)五子棋

    python實(shí)現(xiàn)人機(jī)五子棋

    這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)人機(jī)五子棋,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-03-03
  • 基于Python?OpenCV和?dlib實(shí)現(xiàn)眨眼檢測(cè)

    基于Python?OpenCV和?dlib實(shí)現(xiàn)眨眼檢測(cè)

    這篇文章主要介紹了基于Python?OPenCV及dlib實(shí)現(xiàn)檢測(cè)視頻流中的眨眼次數(shù)。文中的代碼對(duì)我們的學(xué)習(xí)和工作有一定價(jià)值,感興趣的同學(xué)可以參考一下
    2021-12-12
  • 如何使用python實(shí)現(xiàn)模擬鼠標(biāo)點(diǎn)擊

    如何使用python實(shí)現(xiàn)模擬鼠標(biāo)點(diǎn)擊

    這篇文章主要介紹了如何使用python實(shí)現(xiàn)模擬鼠標(biāo)點(diǎn)擊,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-01-01
  • 淺析Python中壓縮zipfile與解壓縮tarfile模塊的使用

    淺析Python中壓縮zipfile與解壓縮tarfile模塊的使用

    Python?提供了兩個(gè)標(biāo)準(zhǔn)庫(kù)模塊來(lái)處理文件的壓縮和解壓縮操作:zipfile和tarfile,本文將分享?這兩個(gè)模塊的使用方法,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-10-10
  • VSCode中autopep8無(wú)法運(yùn)行問(wèn)題解決方案(提示Error: Command failed,usage)

    VSCode中autopep8無(wú)法運(yùn)行問(wèn)題解決方案(提示Error: Command failed,usage)

    這篇文章主要介紹了VSCode中autopep8無(wú)法運(yùn)行問(wèn)題解決方案,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03
  • python獲取豆瓣電影簡(jiǎn)介代碼分享

    python獲取豆瓣電影簡(jiǎn)介代碼分享

    這篇文章主要介紹了使用python獲取豆瓣電影簡(jiǎn)介的方法,大家參考使用吧
    2014-01-01
  • python捕獲警告的三種方法

    python捕獲警告的三種方法

    這篇文章主要介紹了python捕獲警告的三種方法,幫助大家更好的理解和學(xué)習(xí)使用python,感興趣的朋友可以了解下
    2021-03-03
  • 跟老齊學(xué)Python之不要紅頭文件(2)

    跟老齊學(xué)Python之不要紅頭文件(2)

    在前面學(xué)習(xí)了基本的打開(kāi)和建立文件之后,就可以對(duì)文件進(jìn)行多種多樣的操作了。請(qǐng)看官要注意,文件,不是什么特別的東西,就是一個(gè)對(duì)象,如同對(duì)待此前學(xué)習(xí)過(guò)的字符串、列表等一樣。
    2014-09-09

最新評(píng)論