随机字发生器终止条件故障

时间:2015-03-08 00:21:07

标签: python python-3.x

我正在尝试构建一个随机单词生成器,随机选择一个辅音和元音结构(例如,' cvvc'可能是'意思是')。它不起作用。我在调试器中运行它时的问题是在while循环结束时的最后两行。

import random

vowelsList = ['a','e','i','o','u']

constonentsList = ['b','c','d','f','g','h','j','k','l','p','q','r','s','t','u','v','w','x','y','z','th','ch','sh','st','ck']

n = random.randint(1,2)
word = ''
struct = ''
length = 0
x = True
len_con = len(constonentsList)
len_vow = len(vowelsList)
length = 0

while x:
    if n == 1:
        word +=  constonentsList[random.randint(0,len_con - 1)]
        struct += 'c'
        length += 1
    elif n == 2:
        word += vowelsList[random.randint(0,len_vow - 1)]
        struct += 'v'
        length += 1
    n = random.randint(0,2)
    if (length >= 3 & n == 0):    #If the word is more than 3 letters and n == 0, don't continue
        x = False

print(word)
print(struct)
print(length)

1 个答案:

答案 0 :(得分:1)

您的代码实际上正在运行,尽管只是公正的。长度反映了您产生的辅音和元音的数量,但生成的单词可能会更长,因为您包含两个字母的辅音,如thsh。但是,还有待改进。

&运算符没有按照您的想法执行。这是binary bitwise operator;它以整数设置二进制标志:

>>> 1 & 1
1
>>> 2 & 1
3

您希望使用and operator来执行布尔逻辑AND 测试:

if length >= 3 and n == 0:

对于布尔值,使用&恰好工作,因为布尔类型会使运算符重载,以便仍然返回布尔值。

您可以使用random.choice() function大大简化您的程序,并将终止测试移至while循环条件。 length变量是多余的;你可以在这里使用len(struct)

import random
import string

vowels = 'aeiou'
consonants = [c for c in string.ascii_lowercase if c not in vowels]
consonants += ['th','ch','sh','st','ck']

n = random.randint(1, 2)
word = ''
struct = ''

while len(struct) < 3 or n:  # minimum length 3
    if n == 1:
        word += random.choice(consonants)
        struct += 'c'
    elif n == 2:
        word += random.choice(vowels)
        struct += 'v'
    n = random.randint(0, 2)

print(word)
print(struct)
print(len(struct))