簡體   English   中英

Python-將int轉換為字符串只能使用一次?

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

我正在學習如何在python中操作列表,因此我決定組成一個練習,看看是否可以僅通過使用python的列表操作來實現“ 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'不受支持的操作數類型

我注意到第一個循環沒有問題,但是總是在第二個循環上引發異常。 即使我切換循環順序也會發生這種情況。

有人可以解釋該異常是什么原因,以及為什么它僅在第二個循環中發生嗎?

一旦執行第一個循環,列表中的某些元素就是字符串,您將無法再將它們用作訪問列表的索引。 您還在做一些奇怪的事情,例如將一個元素轉換為字符串,然后用空字符串代替整個東西,而不僅僅是分配一個空字符串,然后調用一個使列表變異的函數,返回列表,然后重新分配所有這些元素回歸自身。 相反,請使用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)

-:'str'和'int'的不受支持的操作數類型

Python解釋器說您正在嘗試減去一個字符串和一個整數。 像:“ 123”-1在第一個循環中,您已將整數轉換為字符串,因此,如果要在第二個循環中進行減法,則需要將字符串轉換回整數。 像:int(“ 123”)-1

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM