我有一个使用raw_input获取用户句子的函数。然后我的第二个函数拆分句子,所以我只是试图更新句子上的数字。这是分句:
['You', 'are', '42', 'this', 'year']
我正在尝试更新42到43做一个回复并打印'你今年是43岁'
我可以使用isdigit()来拉取数字,但我无法增加它。这就是我到目前为止所做的:
def GetDigits(sentence):
for i in sentence:
if i.isindigit():
i = i +1
return sentence
答案 0 :(得分:0)
您尝试在字符串中添加1,因为'42'
与42
不同。
您需要先使用'42'
将int
更改为int(v)
,然后再将其增加。
def GetDigits(sentence):
for i, v in enumerate(sentence):
if v.isdigit():
sentence[i] = str(int(v) + 1)
return sentence
答案 1 :(得分:0)
对于字符串有一种内置的方法,对此更好,format()
age = raw_input('How old are you?')
sentence = 'You are {} this year'
print(sentence.format(age))
如果您需要更新它,您可以:
print(sentence.format(int(age) + 1))
或者作为利用生成器理解的函数:
def get_digits(sentence):
return ' '.join(str(int(word) + 1) if word.isdigit() else word for word in sentence.split())
答案 2 :(得分:0)
Python中的数字是不可变对象,因此当您执行i = i+1
时,您将创建一个新对象。此新对象不是原始sentence
对象的一部分。此外,' 42'是一个字符串。您无法在其上应用数字添加操作。您需要先将其转换为整数。
这就是你所需要的 -
def GetDigits(sentence):
for idx, value in enumerate(sentence):
if value.isdigit():
sentence[idx] = int(value) +1
return sentence
答案 3 :(得分:0)
这里的关键问题是,您正在尝试找到一个函数,让您知道何时将字符串转换为int是安全/正确的 - 但是没有这样的函数。有各种近似值,但最简单的方法是尝试转换字符串。这是Python中的一般原则,EAFP: Easier to Ask Forgiveness than Permission。该语言的设计围绕着这样一个事实:检查某些东西是否有效的方法就是这样做,然后处理它没有工作的情况(通常意味着例外)。试图打击这种设计只会让你的生活更加艰难。
但这不是唯一的问题;这里有很多问题。
isindigit
不是字符串的方法。也许你的意思是isdigit
?
isdigit
并没有为您提供正确的答案,例如-3
- 或者就此而言,非西方脚本中的整数(可能会返回{ {1}}但实际上不能被Python解释为整数。
仅仅因为isdigit
是一个表示整数的字符串并不意味着它是一个整数;它仍然是一个字符串,i
仍然是i + 1
。您需要致电TypeError
以获取其值作为数字。
重新分配到int(i)
根本不会影响i
。您所做的就是将局部变量sentence
变为另一个值的名称。您需要使用i
做 - 建立一个新句子,或者就地修改句子(例如,通过使用i
来跟踪索引,所以你可以做enumerate
)。
虽然我不清楚你对结果做了什么,但我敢打赌你实际上想要恢复字符串,而不是字符串和整数的组合,所以你&# 39; ll可能希望在添加1后转换回sentence[index] = …
。
所以,你想要的是这样的:
str
然而,这可能有点太聪明了。如果def GetDigits(sentence):
new_sentence = []
for i in sentence:
try:
i = str(int(i) + 1)
except ValueError:
pass
new_sentence.append(i)
return new_sentence
不代表整数,i
将会引发int(i)
,意味着ValueError
仍然引用原始字符串,我们将其添加到{{1} }}。否则,我们将其转换为整数,添加1,转换回字符串,并使i
引用此新字符串,我们将其添加到new_sentence
。如果您不理解为什么i
始终做正确的事情,您应该更明确地重写它。
答案 4 :(得分:0)
使用re
模块的正则表达式的另一种hacky方式,
import re
sentence = input("Enter the sentence : \n")
def GetDigits(sentence):
L = []
for i in sentence.split():
if re.match(r'\d+$', i):
i = int(i)+1
L.append(str(i))
else:
L.append(i)
sentence = ' '.join(L)
return(sentence)
print(GetDigits(sentence))
<强>输出:强>
Enter the sentence :
You are 42 this year
You are 43 this year