我有一个代码:
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的列表,以便我可以在以后添加所有字符串来生成单词。但它没有发生。
怎么办?
答案 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)