Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/340.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
在python3中创建变量以分配多个值_Python - Fatal编程技术网

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

在python3中创建变量以分配多个值,python,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

我有一个密码:

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)用输入的字母数打印生成的单词

但输出只产生了限制之前生成的字母。如果输入5。它只生成第五个字母

我所做的:我想让变量j成为一个带有索引I的列表,以便以后可以添加所有字符串来生成单词。但事实并非如此


怎么办?

您的代码的错误比您刚才要求的要多

例如,如果用户输入7个字母,则表示您的
j
列表只能容纳5个字母,因此抛出索引错误

解决方案是创建一个空列表,每次都附加到该列表中


你的
a
字典是多余的,也许你只是想学习如何使用字典?您可以与以下内容进行比较:

if k == 'v':
     #do something

elif k == 'c':
     #do something

您的
else
语句毫无意义,因为您的用户可以输入任何内容,如果它不在您的字典中,它将抛出一个keyrerror,也许可以将其删除?也许这还没有完全实现,但是查找用户输入作为字典的键通常是个坏主意。用别的东西


最后,要回答您的问题,请将行
print(j)
移到循环
之外。当一切都说了又做了,它应该看起来像:

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()将其合并为字符串:


把它分成不同的问题

问题1:用户选择一封信

def pick_letter():
    while True:
        user_choice = input("Would you like a [v]owel or [c]onsonant?")
        if user_choice[0].lower() == "v":
           return random.choice(vowels)
        elif user_choice[0].lower() == "c":
           return random.choice(consonants)
        else:
           print("Unknown Input: %r"%user_choice)

print(pick_letter())
问题2:选择随机字符的字母数并将它们连接起来

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

print(baby_name(5))

只要将J的声明移到for块之外就可以了。事实上,在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个字母的名字是可能的):


a
列表的目的是什么?看起来你需要做的就是比较
k=='v'
k=='c'
。你能解释一下这行吗:
j=a[i]
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
    ...
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)