鱼C论坛

 找回密码
 立即注册
查看: 11969|回复: 73

[已解决]小白Python练习册(8)【鱼币福利】

[复制链接]
发表于 2020-4-28 08:53:35 | 显示全部楼层 |阅读模式
10鱼币
本帖最后由 liuzhengyuan 于 2020-4-28 18:20 编辑

给定一个字符串 s,输出它的所有连续子串
输入:s = 'abcd'
输出:
a
b
c
d
ab
bc
cd
abc
bcd
abcd


                               
登录/注册后可看大图

有人说这已经不是小白级别的了
但是我的答案是使用小白办法来写的

答案(有注释):

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





如果觉得有挑战性,别忘了评分


                               
登录/注册后可看大图

最佳答案
2020-4-28 08:53:36
  1. def substring(strs):
  2.     sarr = []
  3.     for i in range(0,len(strs)):
  4.         for j in range(i+1,len(strs)+1):
  5.             sarr.append(strs[i:j])
  6.     return sarr
  7. strs = substring(input('Input a string:'))
  8. for i in strs:
  9.     print(i)
复制代码

评分

参与人数 1荣誉 +5 鱼币 +3 贡献 +3 收起 理由
WangJS + 5 + 3 + 3 无条件支持楼主!

查看全部评分

本帖被以下淘专辑推荐:

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-4-28 08:53:36 | 显示全部楼层    本楼为最佳答案   
  1. def substring(strs):
  2.     sarr = []
  3.     for i in range(0,len(strs)):
  4.         for j in range(i+1,len(strs)+1):
  5.             sarr.append(strs[i:j])
  6.     return sarr
  7. strs = substring(input('Input a string:'))
  8. for i in strs:
  9.     print(i)
复制代码

评分

参与人数 1荣誉 +2 鱼币 +2 贡献 +1 收起 理由
liuzhengyuan + 2 + 2 + 1

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-4-28 13:17:08 | 显示全部楼层
这已经不算小白级别了

评分

参与人数 1荣誉 +2 鱼币 +2 贡献 +1 收起 理由
liuzhengyuan + 2 + 2 + 1 谢谢,提醒 ^_^

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-4-28 14:10:08 | 显示全部楼层
  1. def func(string):
  2.     l=string.__len__()
  3.     for i in range(l):
  4.         for j in range(i+1,l+1):
  5.             yield string[i:j]

  6. def main(s):
  7.     print(*func(s),sep='\n')

  8. main('abcd')
复制代码

评分

参与人数 1荣誉 +2 鱼币 +2 贡献 +1 收起 理由
liuzhengyuan + 2 + 2 + 1 鱼C有你更精彩^_^

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-4-28 14:43:16 | 显示全部楼层
....
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-4-28 15:01:46 | 显示全部楼层
本帖最后由 WangJS 于 2020-4-28 18:54 编辑

先用一个最简单的方法:

应该都能理解

  1. s = 'abcd'
  2. for i in range(len(s)):
  3.     print(s[i:i+1])
  4. for i in range(len(s)-1):
  5.     print(s[i:i+2])
  6. for i in range(len(s)-2):
  7.     print(s[i:i+3])
  8. for i in range(len(s)-3):
  9.     print(s[i:i+4])
复制代码


再试着用一个for循环:

  1. s = 'abcd'
  2. for i in range(1,5):
  3.     for f in range(len(s)-i+1):
  4.         print(s[f:f+i])
复制代码


最后在按照题目要求变成函数

  1. def zichuan(s):
  2.     for i in range(1,len(s)+1):
  3.         for f in range(len(s)-i+1):
  4.             print(s[f:f+i])
  5. f = input('输入内容:')
  6. zichuan(f)
复制代码

评分

参与人数 1荣誉 +5 鱼币 +3 贡献 +1 收起 理由
liuzhengyuan + 5 + 3 + 1 感谢楼主无私奉献!

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-4-28 15:04:32 | 显示全部楼层
。。。
  1. def e8(s):
  2.         for wlen in range(1, len(s) + 1):
  3.                 for pos in range(len(s) - wlen + 1):
  4.                         print(s[pos : pos + wlen])
复制代码

这好像不是小白级别了吧……
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-4-28 15:06:11 | 显示全部楼层
冰河星云 发表于 2020-4-28 15:04
。。。

这好像不是小白级别了吧……

别看这么难,其实只要把握住方法就很容易了我把代码加了注释
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-4-28 15:09:41 | 显示全部楼层
liuzhengyuan 发表于 2020-4-28 15:06
别看这么难,其实只要把握住方法就很容易了我把代码加了注释


这样不是更简单
  1. print("""a
  2. b
  3. c
  4. d
  5. ab
  6. bc
  7. cd
  8. abc
  9. bcd
  10. abcd
  11. """)
复制代码

(滑稽)
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-4-28 15:10:15 | 显示全部楼层
我……不会
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-4-28 15:11:03 | 显示全部楼层

其实很简单的,就像做数学题一样,只要找到方法(你可以看看答案
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-4-28 15:11:23 | 显示全部楼层
本帖最后由 qiuyouzhi 于 2020-4-28 15:16 编辑
liuzhengyuan 发表于 2020-4-28 15:06
别看这么难,其实只要把握住方法就很容易了我把代码加了注释


最重要的是,我感觉小白把握不住方法。。。
  1. def func(s):
  2.     for i in range(len(s)+1):
  3.         for j in range(i):
  4.             yield s[j:i]
复制代码

由于代码写的太淦,这里附上测试
  1. def main():
  2.     a = tuple(func('abcd'))
  3.     b = tuple(e8('abcd'))
  4.     for each in a:
  5.         if each not in b:
  6.             print("FALSE!")
  7.             break
  8.     else:
  9.         print("TRUE!")
复制代码


P.S: 你把yield改成print,然后输入一个特别长的字符串试试?

评分

参与人数 1荣誉 +2 鱼币 +2 贡献 +1 收起 理由
liuzhengyuan + 2 + 2 + 1

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-4-28 15:11:58 | 显示全部楼层
liuzhengyuan 发表于 2020-4-28 15:11
其实很简单的,就像做数学题一样,只要找到方法(你可以看看答案)

也是,但我直接跳过基础去学界面
需要的时候才会返回去
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-4-28 15:14:52 | 显示全部楼层
zltzlt 发表于 2020-4-28 13:17
这已经不算小白级别了

拓展题
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-4-28 15:17:08 | 显示全部楼层
冰河星云 发表于 2020-4-28 15:09
这样不是更简单

(滑稽)

你要通用啊
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-4-28 15:20:18 | 显示全部楼层

我觉得还是得老王出题

评分

参与人数 2荣誉 +2 鱼币 +2 收起 理由
liuzhengyuan + 1 + 1 无条件支持楼主!
WangJS + 1 + 1 偷偷支持一下[滑稽]

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-4-28 15:21:57 | 显示全部楼层
qiuyouzhi 发表于 2020-4-28 15:20
我觉得还是得老王出题

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-4-28 15:30:19 | 显示全部楼层
隐隐约约感觉zltzlt的每日一题有这个
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-4-28 15:33:26 | 显示全部楼层
zltzlt 发表于 2020-4-28 13:17
这已经不算小白级别了

这个不是很简单吗
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-4-28 15:34:10 | 显示全部楼层
投机取巧:

  1. >>> from itertools import combinations as c
  2. >>> result = []
  3. >>> target = "abcd"
  4. >>> result.append((target,))
  5. >>> result.extend(list(c(target, 3)))
  6. >>> result.extend(list(c(target, 2)))
  7. >>> result.extend(list(c(target, 1)))
  8. >>> result
  9. [('abcd',), ('a', 'b', 'c'), ('a', 'b', 'd'), ('a', 'c', 'd'), ('b', 'c', 'd'), ('a', 'b'), ('a', 'c'), ('a', 'd'), ('b', 'c'), ('b', 'd'), ('c', 'd'), ('a',), ('b',), ('c',), ('d',)]
  10. >>>
复制代码

评分

参与人数 2荣誉 +5 鱼币 +1 贡献 +2 收起 理由
liuzhengyuan + 2 鱼C有你更精彩^_^
WangJS + 3 + 1 + 2 看不懂 /汗

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-4-23 22:27

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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