0

我正在尝试创建一个“简单”的脚本。事实证明这并不像我想象的那么容易。我收到此错误:

IndexError: list index out of range

这是整个代码。它发生在if name[2]: 它发生在您输入 2 个单词时,但它在输入 3 时完全起作用。

name = input('Enter name: ').split()
print(name)
print('Voornaam: ' + name[0])
print('Achernaam: ' + name[len(name) - 1])
if name[2]:
    print('Tussenvoegsels: ' + name[1])
print()
print('Uw volledige naam is:', end=' ')
if name[2]:
    print(name[0], name[1], name[2])
else:
    print(name[0], name[1])

输出:

>>> 
Enter name: name0 name1 name2
['name0', 'name1', 'name2']
Voornaam: name0
Achernaam: name2
Tussenvoegsels: name1

Uw volledige naam is: name0 name1 name2
>>> ================================ RESTART ================================
>>> 
Enter name: name0 name1
['name0', 'name1']
Voornaam: name0
Achernaam: name1
Traceback (most recent call last):
  File "C:/Users/lapje/Documents/Naam.py", line 5, in <module>
    if name[2]:
IndexError: list index out of range
4

3 回答 3

3

签入if是错误的,因为它在上下文中没有意义。

做这个:

if len(name) >= 3:  #name must have at least 3 parts
    print(name[0], name[1], name[2])
else:
    print(name[0], name[1])
于 2013-09-05T10:11:26.613 回答
1

if name[2]:不检查是否name有 index [2]。它尝试访问name[2]索引并将该索引的值评估为真/假。

在尝试访问它之前,您需要确保数组具有索引,否则您将获得索引超出范围错误。

于 2013-09-05T10:13:41.423 回答
1

更轻松:

x = [1, 2]
print(x[2])

您需要检查该元素是否存在并处理这种情况。使用您的代码,列表也可以包含零个或一百个元素。但是,如果你使用x = split(s)生成列表,你也可以使用' '.join(x)返回字符串(至少接近它,两个连续的空格会被压缩为一个)。

于 2013-09-05T10:13:59.003 回答