[英]How do I set characters in a Python string?
我有一個函數,可以減少由字符串表示的整數參數。 例如,如果我輸入字符串“ 100”,則它應返回“ 99”。
def dec(s):
i = len(s) - 1
myString = ""
while (i >= 0):
if s[i] == '0':
s[i] = '9'
i -= 1
else:
s[i] = chr(int(s[i]) - 1)
break
return s
但是,Python會發出此錯誤。
s[i] = '9'
TypeError: 'str' object does not support item assignment
我假設s[i]
不能被視為左值。 對此有什么解決方案?
你可以做:
s = s[:i] + "9" + s[i+1:]
這需要前字符索引字符串的一部分i
,附加一個9
,然后追加字符索引之后的字符串的一部分i
。 但是,像這樣進行大量的字符串追加並非十分有效。
另一個答案是,如果要處理數字,為什么不實際使用數字而不是字符串呢?
def dec(s):
return str(int(s) - 1)
你不能 在Python中,字符串是不可變的-創建后就無法更改。
您有兩個選擇,而不必完全更改功能。
將字符串轉換為列表並返回:
def dec(s):
s = list(s)
i = len(s) - 1
myString = ""
while (i >= 0):
if s[i] == '0':
s[i] = '9'
i -= 1
else:
s[i] = chr(int(s[i]) - 1)
break
return ''.join(s)
每次要進行更改時,請創建一個新字符串:
def dec(s):
i = len(s) - 1
myString = ""
while (i >= 0):
if s[i] == '0':
s = s[:i] + "9" + s[i+1:]
i -= 1
else:
s = s[:i] + chr(int(s[i]) - 1) + s[i+1:]
break
return s
我不確定您為什么要逐個字符串地玩游戲。 這不是更簡單嗎?
def decrement_string(s):
try:
i = int(s)
i = i - 1
return str(i)
except:
# do something else
return "that's no number!"
while True:
s = raw_input("give me a number and I'll decrement it for you: ")
print decrement_string(s)
解決您的“減少”字符串的特定問題的解決方案是將s
轉換為具有int(s)
,將其減少,然后再轉換回str: str(int(s)-1)
。
In [175]: str(int('100')-1)
Out[175]: '99'
一般的解決方案是不要嘗試更改字符串的元素; 使用其他類型來表示您的作品,並最后轉換為字符串。
Python字符串是不可變的,因此您無法對其進行修改。 您必須創建一個包含所需值的新字符串。 最好將字符串轉換為整數,將其遞減,然后再次將其轉換回整數。
字符串不變的原因主要是效率。
字符串不是可變的,但列表是可變的。 您可以輕松地將字符串轉換為單個字符的列表:
l = list(s)
然后將其轉換回:
s = ''.join(l)
由於您使用的是數字字符串,因此有更多直接方法,但是此答案適用於一般情況。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.