在字符串中查找数字,加 1 并替换
find number in string, add 1 and replace
我需要编写一个代码,其中一个字符串包含一个数字,然后这个数字递增 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)
你可以在这里使用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"
这将防止用户输入超出范围的值
根据您要求数值必须在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'
您的代码中可能存在的错误是:
- 您正在尝试用
int
直接替换 string
中的类型数据。
- 也只检查
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
循环更好。
我需要编写一个代码,其中一个字符串包含一个数字,然后这个数字递增 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)
你可以在这里使用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"
这将防止用户输入超出范围的值
根据您要求数值必须在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'
您的代码中可能存在的错误是:
- 您正在尝试用
int
直接替换string
中的类型数据。 - 也只检查
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
循环更好。