我不确定我在这里做错了什么,有人知道吗?我一直收到一个错误,上面写着“元组索引超出范围”。我正在学习一个学校的教程,我似乎正在做一切正确,但我不断收到这个错误。任何帮助,将不胜感激!非常感谢你。
animal = input("Enter any LARGE animal: ")
smallAnimal = input("Enter any SMALL animal: ")
weapon = input("Enter a sharp weapon: ")
def createDictionary():
storyDict = dict()
storyDict['animal'] = animal
storyDict['smallAnimal'] = smallAnimal
storyDict['weapon'] = weapon
return storyDict
def main():
dictionary = createDictionary()
animalFormat = """Once upon a time, there was a very, very large {animal}. This {animal} was the meanest, baddest, most gruesome {animal} there was. And one day, a wild {1} had
stepped on the {animal}'s foot. At that moment, the {1} knew it had messed up. This made the {animal} angry, so he took a {weapon} and STABBED the
{smallAnimal}with it! The {smallAnimal} squirmed and fought to get out, but it was no match for the {animal} with a {weapon}.
The End."""
withSubstitutions = animalFormat.format(**dictionary)
print(withSubstitutions)
main()
答案 0 :(得分:0)
在animalFormat中,替换:
{1}
使用:
{smallAnimal}
此更改必须在两个地方进行。
由于您要向format
提供包含关键字的参数,因此1
无需参考。
观察这是有效的:
>>> d = {'a':1, 'b':2}
>>> 'Twice {a} is {b}'.format(**d)
'Twice 1 is 2'
但这不起作用:
>>> 'Twice {1} is {b}'.format(**d)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IndexError: tuple index out of range
如果您向format
提供关键字参数,则1
无需参考。
可以提供位置参数和关键字参数。例如:
>>> 'Twice {1} is {b}'.format('Arg0', 'ArgOne', **d)
'Twice ArgOne is 2'
animal = input("Enter any LARGE animal: ")
smallAnimal = input("Enter any SMALL animal: ")
weapon = input("Enter a sharp weapon: ")
def createDictionary():
storyDict = dict()
storyDict['animal'] = animal
storyDict['smallAnimal'] = smallAnimal
storyDict['weapon'] = weapon
return storyDict
def main():
dictionary = createDictionary()
animalFormat = """Once upon a time, there was a very, very large {animal}. This {animal} was the meanest, baddest, most gruesome {animal} there was. And one day, a wild {smallAnimal} had
stepped on the {animal}'s foot. At that moment, the {smallAnimal} knew it had messed up. This made the {animal} angry, so he took a {weapon} and STABBED the_
{smallAnimal}with it! The {smallAnimal} squirmed and fought to get out, but it was no match for the {animal} with a {weapon}.
The End."""
withSubstitutions = animalFormat.format(**dictionary)
print(withSubstitutions)
main()
示例运行:
Enter any LARGE animal: Lion
Enter any SMALL animal: Mouse
Enter a sharp weapon: knife
Once upon a time, there was a very, very large Lion. This Lion was the meanest, baddest, most gruesome Lion there was. And one day, a wild Mouse had
stepped on the Lion's foot. At that moment, the Mouse knew it had messed up. This made the Lion angry, so he took a knife and STABBED the
Mousewith it! The Mouse squirmed and fought to get out, but it was no match for the Lion with a knife.
The End.
答案 1 :(得分:0)
您正在按关键字和有序数据混合格式化字符串。
MCVE:
s = "{0}{k}".format(k='something')
例外:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IndexError: tuple index out of range
由于您的模板包含有序参数({1}
)的占位符,因此您需要将它们传递给您的函数:
animalFormat = """Once upon a time, there was a very, very large {animal}. This {animal} was the meanest, baddest, most gruesome {animal} there was. And one day, a wild {1} had
stepped on the {animal}'s foot. At that moment, the {1} knew it had messed up. This made the {animal} angry, so he took a {weapon} and STABBED the
{smallAnimal}with it! The {smallAnimal} squirmed and fought to get out, but it was no match for the {animal} with a {weapon}.
The End."""
d = {'animal': 'X', 'smallAnimal': 'Y', 'weapon': 'Z'}
a = ['A', 'B'] # placeholder
animalFormat.format(*a, **d) # works fine
答案 2 :(得分:0)
此错误是因为您有命名替换(例如.. very large {animal} ..
)以及位置替换(例如At that moment, the {1} knew ..
)。< / p>
考虑传递类似的内容:
animalFormat.format("Replacement for {0}", "Replacement for {1}", **dictionary)
在上述情况下,替代的位置部分将为:
At the moment, the Replacement for {1} knew ..