鱼C论坛

 找回密码
 立即注册
查看: 9235|回复: 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
def substring(strs):
    sarr = []
    for i in range(0,len(strs)):
        for j in range(i+1,len(strs)+1):
            sarr.append(strs[i:j])
    return sarr
strs = substring(input('Input a string:'))
for i in strs:
    print(i)

评分

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

查看全部评分

本帖被以下淘专辑推荐:

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

使用道具 举报

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

评分

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

查看全部评分

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

使用道具 举报

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

评分

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

查看全部评分

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

使用道具 举报

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

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

main('abcd')

评分

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

查看全部评分

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

使用道具 举报

发表于 2020-4-28 14:43:16 | 显示全部楼层
....
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

先用一个最简单的方法:

应该都能理解
s = 'abcd'
for i in range(len(s)):
    print(s[i:i+1])
for i in range(len(s)-1):
    print(s[i:i+2])
for i in range(len(s)-2):
    print(s[i:i+3])
for i in range(len(s)-3):
    print(s[i:i+4])

再试着用一个for循环:
s = 'abcd'
for i in range(1,5):
    for f in range(len(s)-i+1):
        print(s[f:f+i])

最后在按照题目要求变成函数
def zichuan(s):
    for i in range(1,len(s)+1):
        for f in range(len(s)-i+1):
            print(s[f:f+i])
f = input('输入内容:')
zichuan(f)

评分

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

查看全部评分

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

使用道具 举报

发表于 2020-4-28 15:04:32 | 显示全部楼层
。。。
def e8(s):
        for wlen in range(1, len(s) + 1):
                for pos in range(len(s) - wlen + 1):
                        print(s[pos : pos + wlen])
这好像不是小白级别了吧……
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

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

别看这么难,其实只要把握住方法就很容易了我把代码加了注释
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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


这样不是更简单
print("""a
b
c
d
ab
bc
cd
abc
bcd
abcd
""")
(滑稽)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-4-28 15:10:15 | 显示全部楼层
我……不会
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

其实很简单的,就像做数学题一样,只要找到方法(你可以看看答案
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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


最重要的是,我感觉小白把握不住方法。。。
def func(s):
    for i in range(len(s)+1):
        for j in range(i):
            yield s[j:i]
由于代码写的太淦,这里附上测试
def main():
    a = tuple(func('abcd'))
    b = tuple(e8('abcd'))
    for each in a:
        if each not in b:
            print("FALSE!")
            break
    else:
        print("TRUE!")

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

评分

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

查看全部评分

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

使用道具 举报

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

也是,但我直接跳过基础去学界面
需要的时候才会返回去
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

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

使用道具 举报

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

(滑稽)

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

使用道具 举报

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

我觉得还是得老王出题

评分

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

查看全部评分

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

使用道具 举报

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

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

使用道具 举报

发表于 2020-4-28 15:30:19 | 显示全部楼层
隐隐约约感觉zltzlt的每日一题有这个
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

这个不是很简单吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-4-28 15:34:10 | 显示全部楼层
投机取巧:
>>> from itertools import combinations as c
>>> result = []
>>> target = "abcd"
>>> result.append((target,))
>>> result.extend(list(c(target, 3)))
>>> result.extend(list(c(target, 2)))
>>> result.extend(list(c(target, 1)))
>>> result
[('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',)]
>>> 

评分

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

查看全部评分

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-9-21 11:19

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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