仅拆分字符串更新号码

时间:2014-11-04 02:00:21

标签: python string return add updates

我有一个使用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

5 个答案:

答案 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