python中设置长度的合同词

时间:2019-03-04 05:31:21

标签: python

我目前正在尝试创建一种“单词混合器”:对于两个给定的单词和指定的所需长度,程序应返回两个单词的“混合”。但是,它可以是任何形式的混合:它可以是第一个单词的前半部分与第二个单词的后半部分组合,也可以是随机混合,实际上是任何东西。

示例:

鱼+蛋糕,长度5:鱼叉

狗+猫,长4:doga

后期+十字架,长度6:失落

我编写了一个非常草率的代码(如下所示),并且我很感谢一些关于我做错了什么的提示(因为我的输出不是很好),还有什么可以改进的地方。 / p>

from random import randint

name1 = "domingues"
name2 = "signorelli"
names = [name1,name2]
# a list of the desired lengths
lengths = [5,6,7]
mixes = []

def sizes(size):
    if size == 5:
        letters1 = randint(2,3)
    else:
        letters1 = randint(2,size-2)
    letters2 = size-letters1
    return letters1, letters2

def mix(letters1, letters2):
    n = randint(0,1)
    if n == 1:
        a = 0
    else:
        a = 1
    n1 = names[n]
    n2 = names[a]
    result = n1[0:letters2]+n2[-letters1::]
    return result

file = open("results.txt","w+")
for leng in lengths:
    file.write("RESULTS WITH "+str(leng)+" LETTERS \n")
    file.write("\n")
    for i in range(10):
        let1, let2 = sizes(leng)
        result = mix(let1,let2)
        while result == name1 or result == name2:
            result = mix(let2)
        if result not in mixes:
            mixes.append(result)
    for m in mixes:
        if m not in file:
            file.write(m+" \n")
            file.write("\n")
file.close()

(感谢您抽出宝贵的时间帮助我,谢谢!)

5 个答案:

答案 0 :(得分:2)

通常,这是与AI有关的问题,因为我们暗中希望获得可读的混合词。 我只是编写了简单(肮脏)的代码,试图从训练数据中捕获元音和辅音的序列,并根据捕获的规则构建混合词。

import random

consonants_pat = 'BCDFGHJKLMNPQRSTVXZ'.lower()
vowels_pat = 'aeiouy'

train_data = '''
                This our sentence to be used as a training dataset
                It should be longer
                '''

def build_mixer(train_data, num=3, mixed_len=(2, 4)):

    def _get_random_pattern(td, wlen):
        td_splitted = td.lower().split()
        while True:
            w = random.choice(list(filter(lambda x: len(x)>=wlen, td_splitted)))
            for j in range(len(w)-wlen):
                yield tuple(map(lambda x: 0 if x in vowels_pat else 1,  w[j:j + wlen]))

    def _select_vowels(w):
        return 


    def _mixer(w1, w2, num=num, mixed_len=mixed_len):
        allowed_letters = w1.lower().strip() + w2.lower().strip()
        ind = 1
        for j in range(num):
            wlen = random.choice(range(*mixed_len))
            pattern = _get_random_pattern(train_data, wlen)
            _aux = allowed_letters
            word = ''
            try:
                for pat in pattern:
                    for k in pat:
                        if k == 0:
                            choiced = random.choice(list(filter(lambda x: x in vowels_pat,  _aux)))
                            word += choiced
                        else:
                            choiced = random.choice(list(filter(lambda x: x in consonants_pat,  _aux)))
                            word += choiced
                        l = list(_aux)
                        l.remove(choiced)
                        _aux = ''.join(l)
                    ind += 1
                    yield word
                    if ind>num:
                        raise StopIteration
            except IndexError:
                continue

    return _mixer


mixer = build_mixer(train_data, num=6, mixed_len=(3,6))
for mixed in mixer('this', 'horse'):
    print(mixed)

我说出以下话:

  

het hetihs hetihssro sheo hsio tohir

答案 1 :(得分:1)

我建议对单词字符串进行随机切片,然后将其与第二个单词的另一个随机切片组合。获取len(word),并使用random.randrange()随机抽取单词的一部分。

import random

def word_mixer(word1, word2):
    slice1 = word1[:random.randrange(2, len(word1))]
    slice2 = word2[:random.randrange(2, len(word2))]
    return slice1 + slice2

mixed = word_mixer('weasel', 'snake')
print(mixed)

输出:

wesnak
weasesna
weassnak

答案 2 :(得分:0)

这是做到这一点的一种方法。

import random
w1 = 'dog'
w2 = 'cat'
w3 = 'fish'
w4 = 'wolf'


def word_mixer(w1, w2, length):
    new_word = w1 + w2
    x = random.sample(range(len(new_word)), length)
    result = []
    for i in x:
        result.append(new_word[i])

    return "".join(result)

print(word_mixer(w3,w4,4))
print(word_mixer(w2,w4,5))

输出:

lfwi                                                                                                                                  
falwc

答案 3 :(得分:0)

@AkshayNevrekar的post的较小版本:

import random

w1 = 'dog'
w2 = 'cat'
w3 = 'fish'
w4 = 'wolf'

def word_mixer(w1, w2, length):
    return ''.join(random.sample(w1 + w2, length))

print(word_mixer(w3, w4, 4))
print(word_mixer(w2, w4, 5))

答案 4 :(得分:0)

我们还可以使用random.sample并将混合字符串传递给它,如下所示:

import random
w1=input("Enter first word")
w2=input("Enter second word")
len=int(input("Enter length"))
mixed=w1+w2

def wordmixer(mixed,len):
    return ''.join(random.sample(mixed,len))

print(wordmixer(mixed,len))