Python - 将 int 转换为字符串只能使用一次?

Python - Converting an int to a string only works once?

我正在学习如何在 python 中操作列表,所以我决定做一个练习,看看是否可以只使用 [=23= 来实现 "fizzbuzz" 游戏]的列表操作如下图:

#Fizzbuzz Implementation

def fizzbuzz(L):
    # L is a list of integers in order 
    for i in L[2::3]:
        L[i-1] = str(L[i-1])
        L[i-1] = L[i-1].replace(L[i-1],'')
        #No exception thrown here

    for i in L[4::5]:
        L[i-1] = str(L[i-1]) #Exception on this line
        L[i-1] = L[i-1].replace(L[i-1],'')

    for i in L[2::3]:
        L[i-1] += 'fizz'

    for i in L[4::5]:
        L[i-1] += 'buzz'

    return L[:]

L = list(range(1,101))
L[:] = fizzbuzz(L)

我试图将感兴趣的列表中的整数转换为空字符串,然后将字符串附加到它们,但是我得到了 TypeError:- 不支持的操作数类型:'str' 和 'int'

我注意到第一个循环没有问题,但第二个循环总是抛出异常。即使我切换循环顺序也会发生这种情况。

有人可以解释抛出异常的原因以及为什么它只发生在第二个循环中吗?

unsupported operand type(s) for -: 'str' and 'int'

Python 解释器说您正在尝试减去一个字符串和一个整数。喜欢:“123” - 1 在第一个循环中,您已将整数转换为字符串,因此如果您想在第二个循环中进行减法,则需要将字符串转换回整数。比如:int("123") - 1

L[i-1] = str(L[int(i)-1])

执行第一个循环后,列表中的某些元素是字符串,您不能再将它们用作索引来访问列表。你也在做一些奇怪的事情,比如将一个元素转换为一个字符串,然后用空字符串替换整个元素,而不是仅仅分配一个空字符串,并调用一个函数来改变列表,returns 列表,并将所有这些元素重新分配回自身。相反,使用 enumerate 跟踪索引,记住从 1 开始并将索引乘以切片的步长值。

def fizzbuzz(L):
    for i,val in enumerate(L[2::3], start=1):
        L[i*3-1] = ''
    for i,val in enumerate(L[4::5], start=1):
        L[i*5-1] = ''
    for i,v in enumerate(L[2::3], start=1):
        L[i*3-1] += 'fizz'
    for i,v in enumerate(L[4::5], start=1):
        L[i*5-1] += 'buzz'

L = list(range(1,101))
fizzbuzz(L)