【问题标题】:find number in string, add 1 and replace在字符串中查找数字,加1并替换
【发布时间】:2015-08-23 10:05:41
【问题描述】:

我需要编写一个代码,其中一个字符串包含一个数字,然后这个数字加 1,然后在初始字符串输入中打印出来。

它应该像这样工作

>>>addNumber('I slept 3 hours')
what number would you like to increment? 3
I slept 4 hours
>>>addNumber('I have 366 friends on facebook')
what number would you like to increment? 6
I have 377 friends on facebook

到目前为止我有这个,但我知道这是错误的,老实说我不知道​​该怎么做。

def incrementNumbers(statement):
    number1=(int(input('What number would you like to increment?')))
    number2 = number1 +1
    i=[]
    for numbers in statement:
        if numbers.isdigit():
            i.append(numbers)
            statement.replace(numbers,number2)

【问题讨论】:

  • 如果他们想在399 中增加9 怎么办?
  • 我认为它不会被测试为 9,它只显示单个正数。所以它必须是从 0-8
  • 9 既正又单。
  • 是的,但这是一个非常简单的类,所以我只是假设我们只需要从 0 到 8 的数字

标签: python string digit


【解决方案1】:

你可以在这里使用re.sub

>>> import re
>>> s = 'I have 366 friends on facebook'
>>> def addone(obj):
...     val = int(obj.group(1))
...     return str(val+1)
... 
>>> i = raw_input('what number would you like to increment?')
what number would you like to increment?6
>>> re.sub('({})'.format(i),addone,s)
'I have 377 friends on facebook'

另一个例子

>>> s = 'I slept 3 hours'
>>> i = raw_input('what number would you like to increment?')
what number would you like to increment?3
>>> re.sub('({})'.format(i),addone,s)
'I slept 4 hours'

你可以像这样定义你的函数

def addNumber(s):
    def addone(obj):
        val = int(obj.group(1))
        return str(val+1)

    i = raw_input('what number would you like to increment?')
    return(re.sub('({})'.format(i),addone,s))

不过我建议你有一个验证功能

i = raw_input('what number would you like to increment?')
if 0<int(i)<9:
    return(re.sub('({})'.format(i),addone,s))
else:
    return "Number out of range"

这将阻止用户输入超出范围的值

【讨论】:

    【解决方案2】:

    您的代码中可能出现的错误是:

    1. 您正在尝试将int 中的数据直接替换为string
    2. 此外,仅检查 numbers.isdigit() 将修改所有数字,无论您指定要修改什么。

    对您的代码进行可能的更正以使其正常运行:

    def incrementNumbers(statement):
        number1 = int(input('What number would you like to increment?'))
        number2 = number1 +1
        i=[]
        for numbers in statement:
            if numbers.isdigit() and int(numbers) == number1:
                i.append(numbers)
                statement.replace(numbers,str(number2))
    

    您还可以将incrementNumbers(statement) 函数更改为:

    def incrementNumbers(statement):
        number1 = input('What number would you like to increment?')
        number2 = str(int(number1)+1)
        statement = statement.replace(number1,number2)
        return statement
    

    我认为这比使用for 循环更好。

    【讨论】:

      【解决方案3】:

      根据您的要求数值必须在0到8之间,您可以使用string.replace

      def increment(s, inc):
          return s.replace(str(inc), str(inc + 1))
      
      >>> s = 'I have 366 friends on facebook'
      >>> inc = 6
      >>> increment(s, 6)
      'I have 377 friends on facebook'
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-12-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-02-23
        相关资源
        最近更新 更多