Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/310.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用数组生成随机文本_Python_Arrays - Fatal编程技术网

Python 使用数组生成随机文本

Python 使用数组生成随机文本,python,arrays,Python,Arrays,我试图使用我获得的字母频率生成随机文本。首先,我成功地使用了以下代码: for i in range(450): outcome=random.random() if 0<outcome<0.06775: sys.stdout.write('a') if 0.06775<outcome<0.07920: sys.stdout.write('b') if 0.07920<outcome<0.098:

我试图使用我获得的字母频率生成随机文本。首先,我成功地使用了以下代码:

for i in range(450):
    outcome=random.random()
    if 0<outcome<0.06775:
        sys.stdout.write('a')
    if 0.06775<outcome<0.07920:
        sys.stdout.write('b')
    if 0.07920<outcome<0.098:
        sys.stdout.write('c')
    ....
范围(450)内的i的
:
结果=随机。随机()
如果0
执行技巧并返回(示例):

世界银行全球业务规划署(GSPLOTOF ua)已批准了亚太区cgbr sunnee Leseeaeclaiur公司的vxntgsoio kdeniei ot htr dcencrsrrfp BWELSUoASLR,并将其作为一项独立的全球业务规划,并将其纳入国家税务总局的工作范围我们将在新罕布什尔州的一个小村庄和一个小村庄工作

字母表
也可以定义为一个简单的字符串(访问其元素-单个字符-与列表类似)


bisect.bisect(list,value)
获取一个已排序的列表和一个值,并告诉这个值应该放在哪里。更多关于。

Eumiros的答案是完美的,比我的答案简单得多,但因为我努力修改了一个类似问题的旧解决方案,我不希望它白费力气

我甚至还有这个链接 我从中借用了“山中之王”算法

from string import lowercase
from random import random

class TextGenerator(object):        
        def __init__(self, flist, textlength, charmap = lowercase + ' '):            
            self.text_length = textlength
            self.chars = charmap
            self.weights = self._get_weight_list(flist)            

        def create_new_weights(self, flist):
            self.weights = self._get_weight_list(flist)

        def get_weight(self, char):
            return self.weights[self.chars.index(char)]            

        def change_weight(self, char, weight):
            self.weights[self.chars.index(char)] = weight

        def _get_weight_list(self, flist):
            return map (lambda x, y: y-x,
                        flist,
                        flist[1:] + [1.0])[:-1]

        def windex(self):
            assert(len(self.weights) == len(self.chars))
            rnd = random() * sum(self.weights)
            for i, w in enumerate(self.weights):
                rnd -= w
                if rnd < 0:
                    return i

        def create_text(self, flist = None):
            weights = self._get_weight_list(flist)if flist else self.weights
            return u''.join([self.chars[self.windex()] for i in range(self.text_length)])

flist = [0, 0.067750000000000005, 0.082419999999999993, 0.10199, 0.13522000000000001, 0.23702999999999999, 0.25513999999999998, 0.27323999999999998, 0.32793, 0.38483000000000001, 0.38577, 0.39278000000000002, 0.42998999999999998, 0.45023000000000002, 0.50727999999999995, 0.56755999999999995, 0.58255999999999997, 0.58391000000000004, 0.62924000000000002, 0.68508999999999998, 0.76160000000000005, 0.78481000000000001, 0.79229000000000005, 0.81161000000000005, 0.81250999999999995, 0.82718000000000003, 0.82772999999999997, 0.99997999999999998]

texter = TextGenerator(flist, 1000)
print texter.create_text()

texter.change_weight('i', texter.get_weight('e') * 2)
print texter.create_text()
从字符串导入小写字母
从随机导入随机
类TextGenerator(对象):
def uuu init uuuu(self,flist,textlength,charmap=小写+“”):
self.text_length=text长度
self.chars=charmap
self.weights=self.\u获取\u权重\u列表(flist)
def创建新权重(自身、flist):
self.weights=self.\u获取\u权重\u列表(flist)
def get_重量(自身、字符):
返回自身权重[self.chars.index(char)]
def更改_重量(自身、字符、重量):
自身权重[自身字符索引(字符)]=权重
定义获取重量列表(自我、飞行列表):
返回图(λx,y:y-x,
飞行,
flist[1::+[1.0])[:-1]
def windex(自):
断言(len(self.weights)=len(self.chars))
rnd=随机()*和(自身权重)
对于枚举中的i,w(自权重):
rnd-=w
如果rnd<0:
返回i
def create_text(self,flist=None):
权重=自身。如果flist else self.weights,则获取权重列表(flist)
返回u“”。在范围(self.text\u length)内为i连接([self.chars[self.windex()]))
飞行时间=[0, 0.067750000000000005, 0.082419999999999993, 0.10199, 0.13522000000000001, 0.23702999999999999, 0.25513999999999998, 0.27323999999999998, 0.32793, 0.38483000000000001, 0.38577, 0.39278000000000002, 0.42998999999999998, 0.45023000000000002, 0.50727999999999995, 0.56755999999999995, 0.58255999999999997, 0.58391000000000004, 0.62924000000000002, 0.68508999999999998, 0.76160000000000005, 0.78481000000000001, 0.79229000000000005, 0.81161000000000005, 0.81250999999999995, 0.82718000000000003, 0.82772999999999997, 0.99997999999999998]
texter=TextGenerator(flist,1000)
打印文本。创建文本()
texter.change_weight('i',texter.get_weight('e')*2)
打印文本。创建文本()

(第二个代码中的频率是正确的)+1用于二进制搜索算法的使用。人们仍然在使用很多线性时间的算法。@eumiro需要您的帮助来理解二进制搜索部分。@DhruvPathak-您可以在链接的文档页上找到一些示例。@eumiro如何将此随机文本存储到名称中,例如“text1”,以便以后在我的程序中使用?谢谢!
import random
import sys
import bisect

f_list = [0, 0.06775, 0.08242, 0.10199, 0.13522, 0.23703, 0.25514, 0.27324, 0.32793, 0.38483, 0.38577, 0.39278, 0.42999, 0.45023, 0.50728, 0.56756, 0.58256, 0.58391, 0.62924, 0.68509, 0.7616, 0.78481, 0.79229, 0.81161, 0.81251, 0.82718, 0.82773, 0.99998]
alphabet = 'abcdefghijklmnopqrstuvwxyz '

for i in xrange(450):
    sys.stdout.write(alphabet[bisect.bisect(f_list, random.random()) - 1])
from string import lowercase
from random import random

class TextGenerator(object):        
        def __init__(self, flist, textlength, charmap = lowercase + ' '):            
            self.text_length = textlength
            self.chars = charmap
            self.weights = self._get_weight_list(flist)            

        def create_new_weights(self, flist):
            self.weights = self._get_weight_list(flist)

        def get_weight(self, char):
            return self.weights[self.chars.index(char)]            

        def change_weight(self, char, weight):
            self.weights[self.chars.index(char)] = weight

        def _get_weight_list(self, flist):
            return map (lambda x, y: y-x,
                        flist,
                        flist[1:] + [1.0])[:-1]

        def windex(self):
            assert(len(self.weights) == len(self.chars))
            rnd = random() * sum(self.weights)
            for i, w in enumerate(self.weights):
                rnd -= w
                if rnd < 0:
                    return i

        def create_text(self, flist = None):
            weights = self._get_weight_list(flist)if flist else self.weights
            return u''.join([self.chars[self.windex()] for i in range(self.text_length)])

flist = [0, 0.067750000000000005, 0.082419999999999993, 0.10199, 0.13522000000000001, 0.23702999999999999, 0.25513999999999998, 0.27323999999999998, 0.32793, 0.38483000000000001, 0.38577, 0.39278000000000002, 0.42998999999999998, 0.45023000000000002, 0.50727999999999995, 0.56755999999999995, 0.58255999999999997, 0.58391000000000004, 0.62924000000000002, 0.68508999999999998, 0.76160000000000005, 0.78481000000000001, 0.79229000000000005, 0.81161000000000005, 0.81250999999999995, 0.82718000000000003, 0.82772999999999997, 0.99997999999999998]

texter = TextGenerator(flist, 1000)
print texter.create_text()

texter.change_weight('i', texter.get_weight('e') * 2)
print texter.create_text()