[英]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.