MSK 发表于 2017-8-18 19:28:18

Python:每日一题 81(答题领鱼币)

实在抱歉,帖子出了点问题!!!


$
题目:

写一个函数 increment_string(string)

$def increment_string(string):
      pass

函数将有一个参数string,并且它是一个字符串如果字符串已经以数字结束,那么这个数字应该增加1。如果字符串不以数字结尾,就在字符串string结尾加一个 1 返回处理过的字符串

For example:

>>>increment_string('This is an example!')
#'This is an example!1
increment_string('MSK是帅锅~6')
#MSK是帅锅~7
'

{:10_297:}


答案:

**** Hidden Message *****,strng)
      if a:
               str_num = a
               return '%s%d' % (strng[::-1].replace(str_num,'',1)[::-1],int(str_num)+1)
      return '%s%d' % (strng,1)

如果要处理的是形如 'AB99C99'这样的字符串
需要处理的是末尾的字符串数字99,对于之间的99不进行处理
匹配末尾数字,返回一个列表:

接下来将末尾数字+1
楼楼使用的是replace方法

因为replace是从左到右查找,所以楼楼先将字符串颠倒,使用replace后,在将字符串进行一次颠倒

jerryxjr1220 发表于 2017-8-18 19:34:35

那如果结尾的数字是9应该变成10?

MSK 发表于 2017-8-18 19:37:29

jerryxjr1220 发表于 2017-8-18 19:34
那如果结尾的数字是9应该变成10?

是的~

冬雪雪冬 发表于 2017-8-18 20:26:03

没有re,直接从右到左查看字符串。
def increment_string(string):
    lst = list(string)
    d = ''
    while lst:
      if lst[-1].isdigit() and (d == '' or d == '9'):
            d = lst.pop() + d
      else:
            break
    return ''.join(lst) + str(int(d) + 1) if d else string + '1'

>>> increment_string('This is an example!')
'This is an example!1'
>>> increment_string('MSK是帅锅~6')
'MSK是帅锅~7'
>>> increment_string('MSK是帅锅~66')
'MSK是帅锅~67'
>>> increment_string('MSK是帅锅~69')
'MSK是帅锅~70'
>>> increment_string('MSK是帅锅~69999')
'MSK是帅锅~70000'

jerryxjr1220 发表于 2017-8-18 20:33:30

MSK 发表于 2017-8-18 19:37
是的~

import re
def inc_string(string):
        return re.findall('(.*)(\d+), string)+str(int(re.findall('(.*)(\d+), string))+1) if re.match('.*\d+, string) else string+'1'

新手·ing 发表于 2017-8-18 20:58:44

你怎么能这么自恋,,,

MSK 发表于 2017-8-18 23:36:24

新手·ing 发表于 2017-8-18 20:58
你怎么能这么自恋,,,

,,,{:10_278:}

Greenland 发表于 2017-8-19 11:14:50

import re
def increment_string(string):
    matchString = re.match('(.*\D)(\d+)', string)
    if matchString:
      return matchString.group(1) + str(int(matchString.group(2)) + 1)
    else:
      if re.findall('\d', string):
            return str(int(string) + 1)
      else:
            return string + '1'

Greenland 发表于 2017-8-19 11:21:51

楼主的解法有问题吧?试试这个:increment_string('MSK99是帅锅~9')

Greenland 发表于 2017-8-19 11:35:13

jerryxjr1220 发表于 2017-8-18 20:33


我运行了下你的代码,发现这个例子:inc_string('MSK99是帅锅~999')的结果是不对的,能麻烦您解释下您的代码吗?我是新手刚学python,也不是很懂python的正则表达式,所以也可能是我的问题..

九九八十一 发表于 2017-8-19 14:28:00

回复才能看?

wen93435 发表于 2017-8-19 15:15:00

刚加入论坛,没有鱼币,买不了课后习题怎么破?

想当当 发表于 2017-8-19 16:46:54

查看

jerryxjr1220 发表于 2017-8-19 16:49:10

Greenland 发表于 2017-8-19 11:35
我运行了下你的代码,发现这个例子:inc_string('MSK99是帅锅~999')的结果是不对的,能麻烦您解释下您的 ...

你说的是对的,应该在正则表达式上加上美元符号$,表示以数字结尾,不然可能匹配到前面的数字。

MSK 发表于 2017-8-19 16:56:19

jerryxjr1220 发表于 2017-8-19 16:49
你说的是对的,应该在正则表达式上加上美元符号$,表示以数字结尾,不然可能匹配到前面的数字。

我在代码里一加美元符号系统就会添加一大些重复内容,,,
不加又没事{:10_266:}
所以先把帖子隐藏{:10_245:}

jerryxjr1220 发表于 2017-8-19 17:12:37

MSK 发表于 2017-8-19 16:56
我在代码里一加美元符号系统就会添加一大些重复内容,,,
不加又没事
所以先把帖子隐藏{:10_24 ...

我记得我贴代码的时候应该是有美元符号的,不知道现在怎么显示不出来了

MSK 发表于 2017-8-19 17:36:39

九九八十一 发表于 2017-8-19 14:28
回复才能看?

抱歉,是帖子出了点小问题,我将帖子内容隐藏了~

漫步Roam 发表于 2017-8-19 18:35:26

def increment_string(a):
    try:
      int(a[-1])
      a = a[:-1]+str(int(a[-1])+1)
    except:
      a += "1"
    return a

chunchun2017 发表于 2017-8-19 22:30:04

def increment_string(string):
    return(string[:-1]+str(int(string[-1])+1) if string[-1].isdigit() else string+'1')
str0 = input('请输入一个字符串:')
print(increment_string(str0))
运行结果:
============== RESTART: C:\Users\每日一题\81.py ==============
请输入一个字符串:从前有座山
从前有座山1
>>>
============== RESTART: C:\Users\每日一题\81.py ==============
请输入一个字符串:MSK是帅锅~6
MSK是帅锅~7

Greenland 发表于 2017-8-19 23:14:55

jerryxjr1220 发表于 2017-8-19 17:12
我记得我贴代码的时候应该是有美元符号的,不知道现在怎么显示不出来了

好的,我再研究下。谢谢~
页: [1] 2
查看完整版本: Python:每日一题 81(答题领鱼币)