我想创建一个随机字母表。所以我的代码如下:
alphabet = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z']
def new_alphabet():
for i in range(0, 26):
j = 25
my_new_alphabet = [None] * 26
my_new_alphabet[i] = alphabet[random.randint(0, j)]
alphabet.remove(my_new_alphabet[i])
j = j-1
return my_new_alphabet
print new_alphabet()
但是当我尝试执行它时:
my_new_alphabet[i] = alphabet[random.randint(0, j)]
IndexError: list index out of range
这可能相当简单,但我无法找到问题所在。提前谢谢。
答案 0 :(得分:0)
您的代码存在一些问题。
alphabet
缺少字母"S"
,因此它只有25个元素,因此您的循环和随机索引的范围是一次性的,因此超出范围错误j = 25
和my_new_alphabet = [None] * 26
应该在循环之前,否则您将在每次迭代中重置它们此外,您可以完全删除j
,只需使用实际alphabet
列表的边界:
def new_alphabet():
my_new_alphabet = []
while alphabet:
letter = alphabet[random.randint(0, len(alphabet) - 1)]:
# or just use this: letter = random.choice(alphabet)
alphabet.remove(letter)
my_new_alphabet.append(letter)
return my_new_alphabet
或者只使用random.shuffle
,它完全符合您的要求:
def new_alphabet():
my_new_alphabet = list(alphabet) # copy
random.shuffle(my_new_alphabet)
return my_new_alphabet