鱼C论坛

 找回密码
 立即注册
查看: 4693|回复: 39

[技术交流] Python:每日一题 81(答题领鱼币)

[复制链接]
发表于 2017-8-18 19:28:18 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

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



$
题目:

写一个函数 increment_string(string)

  1. $def increment_string(string):
  2.         pass
复制代码


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

For example:

  1. >>>  increment_string('This is an example!')
  2. #'This is an example!1
  3. increment_string('MSK是帅锅~6')
  4. #MSK是帅锅~7
  5. '
复制代码






答案:

游客,如果您要查看本帖隐藏内容请回复

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-8-18 19:34:35 | 显示全部楼层
那如果结尾的数字是9应该变成10?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-8-18 19:37:29 | 显示全部楼层
jerryxjr1220 发表于 2017-8-18 19:34
那如果结尾的数字是9应该变成10?

是的~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-8-18 20:26:03 | 显示全部楼层
没有re,直接从右到左查看字符串。
  1. def increment_string(string):
  2.     lst = list(string)
  3.     d = ''
  4.     while lst:
  5.         if lst[-1].isdigit() and (d == '' or d[0] == '9'):
  6.             d = lst.pop() + d
  7.         else:
  8.             break
  9.     return ''.join(lst) + str(int(d) + 1) if d else string + '1'
复制代码

  1. >>> increment_string('This is an example!')
  2. 'This is an example!1'
  3. >>> increment_string('MSK是帅锅~6')
  4. 'MSK是帅锅~7'
  5. >>> increment_string('MSK是帅锅~66')
  6. 'MSK是帅锅~67'
  7. >>> increment_string('MSK是帅锅~69')
  8. 'MSK是帅锅~70'
  9. >>> increment_string('MSK是帅锅~69999')
  10. 'MSK是帅锅~70000'
复制代码

评分

参与人数 1荣誉 +4 鱼币 +4 收起 理由
新手·ing + 4 + 4

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-8-18 20:33:30 | 显示全部楼层

  1. import re
  2. def inc_string(string):
  3.         return re.findall('(.*)(\d+), string)[0][0]+str(int(re.findall('(.*)(\d+), string)[0][1])+1) if re.match('.*\d+, string) else string+'1'
复制代码

评分

参与人数 1荣誉 +4 鱼币 +4 收起 理由
新手·ing + 4 + 4

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2017-8-18 20:58:44 | 显示全部楼层
你怎么能这么自恋,,,
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-8-18 23:36:24 | 显示全部楼层
新手·ing 发表于 2017-8-18 20:58
你怎么能这么自恋,,,

,,,
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-8-19 11:14:50 | 显示全部楼层
  1. import re
  2. def increment_string(string):
  3.     matchString = re.match('(.*\D)(\d+)', string)
  4.     if matchString:
  5.         return matchString.group(1) + str(int(matchString.group(2)) + 1)
  6.     else:
  7.         if re.findall('\d', string):
  8.             return str(int(string) + 1)
  9.         else:
  10.             return string + '1'
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-8-19 11:21:51 | 显示全部楼层
楼主的解法有问题吧?试试这个:increment_string('MSK99是帅锅~9')

评分

参与人数 1贡献 +3 收起 理由
MSK + 3 谢谢提醒^-^~

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-8-19 11:35:13 | 显示全部楼层

我运行了下你的代码,发现这个例子:inc_string('MSK99是帅锅~999')的结果是不对的,能麻烦您解释下您的代码吗?我是新手刚学python,也不是很懂python的正则表达式,所以也可能是我的问题..
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-8-19 14:28:00 | 显示全部楼层
回复才能看?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-8-19 15:15:00 | 显示全部楼层
刚加入论坛,没有鱼币,买不了课后习题怎么破?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-8-19 16:46:54 | 显示全部楼层
查看
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-8-19 16:49:10 From FishC Mobile | 显示全部楼层
Greenland 发表于 2017-8-19 11:35
我运行了下你的代码,发现这个例子:inc_string('MSK99是帅锅~999')的结果是不对的,能麻烦您解释下您的 ...

你说的是对的,应该在正则表达式上加上美元符号$,表示以数字结尾,不然可能匹配到前面的数字。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

我在代码里一加美元符号系统就会添加一大些重复内容,,,
不加又没事
所以先把帖子隐藏
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-8-19 17:12:37 From FishC Mobile | 显示全部楼层
MSK 发表于 2017-8-19 16:56
我在代码里一加美元符号系统就会添加一大些重复内容,,,
不加又没事
所以先把帖子隐藏{:10_24 ...

我记得我贴代码的时候应该是有美元符号的,不知道现在怎么显示不出来了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-8-19 17:36:39 | 显示全部楼层

抱歉,是帖子出了点小问题,我将帖子内容隐藏了~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-8-19 18:35:26 | 显示全部楼层
  1. def increment_string(a):
  2.     try:
  3.         int(a[-1])
  4.         a = a[:-1]+str(int(a[-1])+1)
  5.     except:
  6.         a += "1"
  7.     return a
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-8-19 22:30:04 | 显示全部楼层
  1. def increment_string(string):
  2.     return(string[:-1]+str(int(string[-1])+1) if string[-1].isdigit() else string+'1')
  3. str0 = input('请输入一个字符串:')
  4. print(increment_string(str0))
复制代码

运行结果:
============== RESTART: C:\Users\每日一题\81.py ==============
请输入一个字符串:从前有座山
从前有座山1
>>>
============== RESTART: C:\Users\每日一题\81.py ==============
请输入一个字符串:MSK是帅锅~6
MSK是帅锅~7
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

好的,我再研究下。谢谢~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-3-29 13:32

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表