名称生成器详细代码;寻找简明扼要好的解决方案

时间:2016-11-25 05:30:26

标签: python algorithm input

如果用户输入小于6,则以下代码有效,但即使作为初学者,我也不认为这是正确的方法,对此有没有简洁明了的解决方案?

代码说明:例如,用户输入4 v v v v,此名称生成器将生成具有四个元音的名称20次。

import random, string

vowels = "aeiou"
consonants = "bcdfghjklmnpqrstvwxz"
letters = string.ascii_lowercase

nameLenInput = int(input("how long do you wanna the name to be? max 6 characters"))
if nameLenInput == 6:
    letter_input_1=input("what letter do you want for 1st cha? Enter 'v' for Vowel, 'c' for consonants, 'l' for any letter: ")
    letter_input_2=input("what letter do you want for 2nd cha? Enter 'v' for Vowel, 'c' for consonants, 'l' for any letter: ")
    letter_input_3=input("what letter do you want for 3rd cha? Enter 'v' for Vowel, 'c' for consonants, 'l' for any letter: ")
    letter_input_4=input("what letter do you want for 4th cha? Enter 'v' for Vowel, 'c' for consonants, 'l' for any letter: ")
    letter_input_5=input("what letter do you want for 5th cha? Enter 'v' for Vowel, 'c' for consonants, 'l' for any letter: ")
    letter_input_6=input("what letter do you want for 6th cha? Enter 'v' for Vowel, 'c' for consonants, 'l' for any letter: ")
elif nameLenInput == 5:
    letter_input_1 = input(
        "what letter do you want for 1st cha? Enter 'v' for Vowel, 'c' for consonants, 'l' for any letter: ")
    letter_input_2 = input(
        "what letter do you want for 2nd cha? Enter 'v' for Vowel, 'c' for consonants, 'l' for any letter: ")
    letter_input_3 = input(
        "what letter do you want for 3rd cha? Enter 'v' for Vowel, 'c' for consonants, 'l' for any letter: ")
    letter_input_4 = input(
        "what letter do you want for 4th cha? Enter 'v' for Vowel, 'c' for consonants, 'l' for any letter: ")
    letter_input_5 = input(
        "what letter do you want for 5th cha? Enter 'v' for Vowel, 'c' for consonants, 'l' for any letter: ")

elif nameLenInput == 4:
    letter_input_1 = input(
        "what letter do you want for 1st cha? Enter 'v' for Vowel, 'c' for consonants, 'l' for any letter: ")
    letter_input_2 = input(
        "what letter do you want for 2nd cha? Enter 'v' for Vowel, 'c' for consonants, 'l' for any letter: ")
    letter_input_3 = input(
        "what letter do you want for 3rd cha? Enter 'v' for Vowel, 'c' for consonants, 'l' for any letter: ")
    letter_input_4 = input(
        "what letter do you want for 4th cha? Enter 'v' for Vowel, 'c' for consonants, 'l' for any letter: ")

elif nameLenInput == 3:
    letter_input_1 = input(
        "what letter do you want for 1st cha? Enter 'v' for Vowel, 'c' for consonants, 'l' for any letter: ")
    letter_input_2 = input(
        "what letter do you want for 2nd cha? Enter 'v' for Vowel, 'c' for consonants, 'l' for any letter: ")
    letter_input_3 = input(
        "what letter do you want for 3rd cha? Enter 'v' for Vowel, 'c' for consonants, 'l' for any letter: ")

elif nameLenInput == 2:
    letter_input_1 = input(
        "what letter do you want for 1st cha? Enter 'v' for Vowel, 'c' for consonants, 'l' for any letter: ")
    letter_input_2 = input(
        "what letter do you want for 2nd cha? Enter 'v' for Vowel, 'c' for consonants, 'l' for any letter: ")

elif nameLenInput == 1:
    letter_input_1 = input(
        "what letter do you want for 1st cha? Enter 'v' for Vowel, 'c' for consonants, 'l' for any letter: ")

def generator():
        if letter_input_1=="v":
            letter1=random.choice(vowels)

        elif letter_input_1=="c":
            letter1=random.choice(consonants)

        elif letter_input_1=="l":
            letter1=random.choice(letters)

        else:
            letter1=letter_input_1
        if nameLenInput == 1:
            name = letter1
            return name

        if letter_input_2=="v":
            letter2=random.choice(vowels)

        elif letter_input_2=="c":
            letter2=random.choice(consonants)

        elif letter_input_2=="l":
            letter2=random.choice(letters)

        else:
            letter2=letter_input_2

        if nameLenInput == 2:
            name = letter1+letter2
            return name

        if letter_input_3=="v":
            letter3=random.choice(vowels)

        elif letter_input_3=="c":
            letter3=random.choice(consonants)

        elif letter_input_3=="l":
            letter3=random.choice(letters)

        else:
            letter3=letter_input_3

        if nameLenInput == 3:
            name = letter1 + letter2 + letter3
            return name


        if letter_input_4 == "v":
            letter4 = random.choice(vowels)

        elif letter_input_4 == "c":
            letter4 = random.choice(consonants)

        elif letter_input_4 == "l":
            letter4 = random.choice(letters)

        else:
            letter4 = letter_input_4

        if nameLenInput == 4:
            name = letter1 + letter2 + letter3 + letter4
            return name

        if letter_input_5 == "v":
            letter5 = random.choice(vowels)

        elif letter_input_5 == "c":
            letter5 = random.choice(consonants)

        elif letter_input_5 == "l":
            letter5 = random.choice(letters)

        else:
            letter5 = letter_input_5

        if nameLenInput == 5:
            name = letter1 + letter2 + letter3 + letter4 + letter5
            return name

        if letter_input_6 == "v":
            letter6 = random.choice(vowels)

        elif letter_input_6 == "c":
            letter6 = random.choice(consonants)

        elif letter_input_6 == "l":
            letter6 = random.choice(letters)

        else:
            letter6 = letter_input_6

        name=letter1+letter2+letter3+letter4
        return name

for i in range(20):
    print(generator())

使这段代码简洁明智的解决方案是否与算法有关?

2 个答案:

答案 0 :(得分:3)

既然你要求简洁,你可以这样做:

import random

vowels = "aeiou"
consonants = "bcdfghjklmnpqrstvwxz"
letters = vowels + consonants

#dictionary to associate letter codes with letter sets:
d = {'v':vowels, 'c':consonants, 'l':letters}

s = input("""Enter a string such as "vcllvc" which indicates
where you would like vowels, consonants,
and unrestricted letters to be: """)

for i in range(20):
    name = ''.join(random.choice(d[t])for t in s)
    print(name)

典型运行:

Enter a string such as "vcllvc" which indicates
where you would like vowels, consonants,
and unrestricted letters to be: clvccvl
nfusjoo
tzofkuf
vnihtut
vqarvoi
hyisxaj
hsaxcef
daobdai
byewkar
vlaznic
mbomsuw
mauhkic
rhumbea
fticmuz
ciacfof
zgezdak
mdahwed
jcavtam
tnofmeu
baowkeg
miedpuh                                                 

答案 1 :(得分:1)

import random, string

vowels = "aeiou"
consonants = "bcdfghjklmnpqrstvwxz"
letters = string.ascii_lowercase

nameLenInput = int(input("Enter the length of name: "))

selectedLetters = []
for x in range(nameLenInput):
    l = input("What letter you want for % cha? 'v' for vowel, 'c' for consonant, 'l' for any letter: "%(x+1))
    selectedLetters.append(l)

def generate():
    generated = ''

    for letter in selectedLetters:
        if letter=='v':
            generated+=random.choice(vowels)
        elif letter=='c':
            generated+=random.choice(consonants)
        elif letter=='l':
            generated+=random.choice(letters)
    return generated


for i in range(20):
    print(generate())

我希望这会有所帮助。