创建变量以在python3中分配多个值

时间:2017-08-25 19:07:11

标签: python

我有一个代码:

import random

vowels, consonants='aeiou','bcdfghjklmnpqrstvwxyz'

terms = int(input("How many letters you want for your baby's name? "))

def babyname():
    for i in range(0, terms):
        j=['','','','','']
        k = input("What letter do you want? Enter 'v' for vowels, 'c' for consonants: ")
        if k == 'v':
            j[i] = random.choice(vowels)
        elif k == 'c':
            j[i] =random.choice(consonants)
        else:
            k = input("What letter do you want? Enter 'v' for vowels, 'c' for consonants: ")
        print(j)

babyname()

输入:i)它会询问要生成的单词的字母数。 ii)它会询问这封信是否应该是每个字母的辅音或元音。

预期输出:i)使用输入的字母数打印生成的单词

但输出产生:i)只有限制前生成的字母。如果输入5。它只生成第5个字母。

我做了什么:我想把变量j变成一个带索引i的列表,以便我可以在以后添加所有字符串来生成单词。但它没有发生。

怎么办?

3 个答案:

答案 0 :(得分:1)

您的代码比您刚才提出的错误更多。

例如,如果用户输入7个字母,则j列表只有5个空格,从而引发索引错误。

解决方案是制作一个空列表并每次都附加到该列表。

您的a词典是多余的,也许您只是想学习如何使用词典?你可以比较:

if k == 'v':
     #do something

elif k == 'c':
     #do something

您的else语句没有意义,因为您的用户可以输入任何内容,如果它不在您的字典中,它会抛出一个keyError,也许可以摆脱它?也许这还没有完全实现,但查找用户输入作为词典的关键通常是一个坏主意。使用其他东西。

最后,要回答您的问题,请将print(j)行移到for loop之外。当所有的说法和完成时,它应该看起来像:

import random

vowels, consonants='aeiou','bcdfghjklmnpqrstvwxyz'

terms = int(input("How many letters you want for your baby's name? "))

def babyname():
    j = []
    for i in range(0, terms):
        a = {'v':'v','c':'c','l':'l'}
        k = input("What letter do you want? Enter 'v' for vowels, 'c' for consonants: ")
        if a[k] == 'v':
            j.append(random.choice(vowels))
        elif a[k] == 'c':
            j.append(random.choice(consonants))
        else:
            print('not an option')
    print(j)

babyname()

这会打印一个列表,所以也许你想使用join():

将它组合成一个字符串
print(''.join(j))

答案 1 :(得分:1)

将其分成不同的问题

问题1:用户选择一个字母

def baby_name(n_letters):
    return "".join(pick_letter() for _ in range(n_letters))

print(baby_name(5))

问题2:选择number_of_letters随机字符并加入

{{1}}

答案 2 :(得分:1)

只需将 J 的声明移到 块之外即可。事实上,在for循环的每次迭代中,变量 j 都会重新赋值['','','','',''],覆盖之前的值。

def babyname():
j=['','','','',''] // here
for i in range(0, terms):
    a = {'v':'v','c':'c','l':'l'} // This too is better off near the j
    ...

但是,您应该考虑完全重写您的代码,也许让j随着每次迭代而增长(现在只能使用5个字母的名称):

def babyname():
    j=[]
    a = {'v':'v','c':'c'}
    for i in range(0, terms):
        k = input("What letter do you want? Enter 'v' for vowels, 'c' for consonants: ")
        if a[k] == 'v':
            j.append(random.choice(vowels))
        elif a[k] == 'c':
            j.append(random.choice(consonants))
        else:
            pass
    print(j)