格式代码只显示第一个

2024-05-19 23:02:50 发布

您现在位置:Python中文网/ 问答频道 /正文

由于某些原因,控制台只显示读取器输入内容的第一个字母。为什么会这样

代码如下:

print ('Welcome to MadLibs')
string1 = input('Noun')
string2 = input('Plural Noun')
string3 = input('Noun')
string4 = input('Place')
string5 = input('Adjective')
string6 = input('Noun')
string='Be kind to your {}-footed {} For a duck may be somebody\'s {}, Be kind to your {} in {} Where the weather is always {}. You may think that this is the {}, Well it is.'
print(string.format(*string1,string2,string3,string4,string5,string6))

Tags: toinputyourstringisbenounprint
2条回答

在格式调用的开头有一个星号(*),您需要删除它:

print(string.format(string1,string2,string3,string4,string5,string6))

星号是将参数解包到函数的方式,在本例中不需要。字符串中也有7个占位符,但仅向format调用传递6个变量。如果您使用的是python3.6及更高版本,那么应该改用f-strings(它们非常棒):

print(f"Be kind to your {string1}-footed {string2} For a duck "
      f"may be somebody's {string3}, Be kind to your {string4} "
      f"in {string5} Where the weather is always {string6}. "
      f"You may think that this is the {string7}, Well it is.")

F字符串使得这种错误更难引入

string1之前的*将该字符串的元素分散到单独的参数中。所以它相当于:

print(string.format(string1[0], string1[1], string1[2], ...,string2,string3,string4,string5,string6))

有关函数定义和参数列表中*的含义,请参见What does ** (double star/asterisk) and * (star/asterisk) do for parameters?

把它扔掉

print(string.format(string1,string2,string3,string4,string5,string6))

但是现在您没有足够的字符串来容纳格式字符串中的所有占位符。缺少Be kind to your {} in的名词。所以应该是:

print ('Welcome to MadLibs')
string1 = input('Noun')
string2 = input('Plural Noun')
string3 = input('Noun')
string4 = input('Noun')
string5 = input('Place')
string6 = input('Adjective')
string7 = input('Noun')
string='Be kind to your {}-footed {} For a duck may be somebody\'s {}, Be kind to your {} in {} Where the weather is always {}. You may think that this is the {}, Well it is.'
print(string.format(string1,string2,string3,string4,string5,string6,string7))

相关问题 更多 >