在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)