我的任务是将具有名称和四个类别的卡片随机化,并将其从文本文件中取出,然后将完成的卡片保存回另一个文本文件中。随机分配的卡数取决于用户输入,除非它在显示此错误之前只会循环几次。
line 35, in <module>
exercise = lines5[exerlinenum]
IndexError: list index out of range
这是我正在使用的代码。
x = 0
list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19,
20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30]
user = int(input("Please enter your even number: "))
if user % 2 == 0:
answer = list.index(user)
split_list = list[0:answer+1]
loop = len(split_list)
else:
print("Input not even!")
import random
while x < loop:
file = open("dognames.txt", "r")
lines1=file.readlines()
namelinenum=random.randint(0, 17)
dogname = lines1[namelinenum]
print("Name:", dogname)
file2 = open("friendliness.txt", "r")
lines2=file2.readlines()
frenlinenum=random.randint(0, 10)
friendliness = lines2[frenlinenum]
print("Friendliness:", friendliness)
file4 = open("intelligence.txt", "r")
lines4=file4.readlines()
intlinenum=random.randint(0, 100)
intelligence = lines4[intlinenum]
print("Intelligence:", intelligence)
file5 = open("exercise.txt", "r")
lines5=file5.readlines()
exerlinenum=random.randint(0, 5)
exercise = lines5[exerlinenum]
print("Exercise:", exercise)
file6 = open("drool.txt", "r")
lines6=file6.readlines()
droollinenum=random.randint(0, 10)
drool = lines6[droollinenum]
print("Drool:", drool)
doginfo=(dogname, friendliness, intelligence, exercise, drool)
file3 = open("dogs.txt", "a")
file3.write(repr(doginfo))
x += 1
file3.close()
这是有问题的文本文件,如果有帮助的话。
dognames.txt
Jack
Harry
Lyla
Lucky
Ringo
Sadie
Pinkie
Teddy
Simrin
Andie
Willow
Luna
Bailey
Zoey
Checkers
Cheddar
Arlo
Humphrey
friendliness.txt
1
2
3
4
5
6
7
8
9
10
intelligence.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
exercise.txt
1
2
3
4
5
drool.txt
1
2
3
4
5
6
7
8
9
10
非常感谢,请对我轻松一点。我是初学者。
答案 0 :(得分:2)
函数random.randint(a,b)
返回一个随机数,其中包含a
和b
。因此,根据您的情况,它可以返回0到5之间的随机数。
在python和大多数语言中,列表索引从0开始。因此,您的lines5
列表大小为5,索引从0到4。请将第35行更改为此-
exerlinenum=random.randint(0, 4)
它应该可以正常工作。
您还需要将所有random.randint()
调用中的第二个参数减少1个,以免看不到此错误。
答案 1 :(得分:1)
问题在于,如果exerlinenum=random.randint(0, 5)
是5
,则索引超出范围,因为exercise.txt
仅具有5个条目。 (请记住,python从0
开始计数索引)
看看其他行,您有同样的问题。 (例如,情报没有101个条目,而只有100个条目。)您很可能只在锻炼时才能看到它,因为从6个中获得5个的可能性大于从101个可能性中获得100个可能性。
答案 2 :(得分:1)
您正在尝试访问名为lines5
的列表的元素。此列表包含从exercise.txt
中读取的5个元素。
在python中,计数从0开始,因此,如果要访问列表的第一个元素,请使用lines5[0]
。如果扩展此逻辑,则会看到lines5[4]
为您提供了lines5
的第5个元素,而lines5[5]
将尝试访问列表中不存在的第6个元素。 / p>
然后,您的代码示例使用random.randint(0, 5)
选择一个随机数。该随机数用于访问lines5
的元素。 random.randint(0, 5)
可能返回0、1、2、3、4或5!如果碰巧返回5,您将被击中
IndexError:列表索引超出范围
因为lines5
仅包含5个元素,而您正在尝试访问第6个元素!
您可以使用random.randint(0, 4)
<{1}}
答案 3 :(得分:0)
另一个答案说明了您收到错误的原因-由于随机库函数返回值。更通用的是,要摆脱“列表索引超出范围”错误,可以安全地在访问列表项之前检查索引。例如,
if line5: # make sure the list is not empty
if exerlinenum >= len(line5): # index out of range
# throw error or what ever
else:
exercise = lines5[exerlinenum]