【发布时间】:2019-08-12 08:41:58
【问题描述】:
我有一个简单的 Python 函数,用于交换字符串中的值。我这样做是通过生成一个伪随机整数,然后将其与下一个索引或上一个索引交换以避免越界异常。
但是,我收到了TypeError: string indices must be integers。当我添加一个打印语句来检查secrets.randbelow() 函数生成的索引的类型时,它返回class 'int',而我期望type 'int'。这是导致错误的原因吗?
功能
import secrets as random
def shuffle_sequence(sequence):
sequence_len = int(len(sequence))
for x in range(0, sequence_len):
swap_index = random.randbelow(sequence_len)
next_index = 0
if swap_index != sequence_len:
next_index = swap_index + 1
else:
next_index = swap_index - 1
sequence[swap_index, next_index] = sequence[next_index, swap_index]
x += 1
return sequence
我什至在函数的第一行添加了一个 int 转换,希望这会有所帮助,但它返回的是同一类 int,这是预期的。
澄清一下,sequence 是一串字母、数字和符号。
【问题讨论】:
-
Python 2 将其称为
type,Python 3 将其统一为class。你永远不会在 Python 3 中看到<type 'int'>。 -
您正在尝试使用元组索引
sequence。 -
另外,字符串是不可变的;您不能分配给现有字符串中的特定位置。
标签: python python-3.x random integer