鱼C论坛

 找回密码
 立即注册
查看: 1341|回复: 3

[已解决]20讲课后作业动动手 求助

[复制链接]
发表于 2020-7-2 00:14:24 | 显示全部楼层 |阅读模式

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

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

x
20讲课后作业动动手:0.请用已学过的知识编写程序,统计下边这个长字符串中各个字符出现的次数并找到小甲鱼送给大家的一句话。


word = input('请输入要查找的长字符串:')


def find(word):
    lenth = len(word)
    symbol = r'!@#$%^&*()_+`~[]{}\/,.|?'
    list1 = list(word) #长字符转化为列表
    for s in symbol:
        for no in range(lenth):
            flags= 0
            if  s == list1[no]:
                flags += 1
                list1.remove(list1[no])
                lenth -= 1
        print('符号',s,'出现了',flags,'次')
    print('小甲鱼的话是:',list1)
   
find(word)

求教大佬看到这个题目的正确思路应该是如何?我感觉写的时候有点混乱,特别是涉及到循环语句时,有没有什么小技巧分享一下,谢谢
最佳答案
2020-7-2 00:38:58



word = input('请输入要查找的长字符串:')


这里你不能用 input 哈,因为甲鱼哥的文本内容是很多行的,而 input 过程中你复制多行的时候会包括不可见字符 \n,Python 会认为你是要换行

导致自动帮你回车了,所以导致你就算复制了文本的全部内容,实际上运行时候也只计算了一行的字符串,那么多行的文本建议用三引号来多行字符串赋值,你后面学习到打开文件,那么就方便多了!

这个题目的正确思路应该是如何?


你其实可以用.count 方法来直接计算字符串中字符出现的次数,这样就不用在 for 循环里面在次嵌套个 for 循环,这样会导致效率很差滴~

参考甲鱼哥的代码吧~这个效率高了很多~
def find(word):
    list1 = []
    for each in word:
        if each not in list1:
            if each == '\n':
                print('\\n', word.count(each))
            else:
                print(each, word.count(each))
            list1.append(each)
    print(list1)

find(word)

for 循环主要用于遍历可迭代对象时候,或者确定循环次数的时候使用的

while 循环主要是用于条件判断 然后持续循环的

还有就是,循环嵌套时候要多加注意,尽量别在循环中进行多余的计算,有时你看上去就写了一行代码 实则循环了无数遍~~

其实小技巧什么的,还是得靠自己多加练习,到后头你理解的更为深入了,有的时候就会感觉当初的问题都不是问题了



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

使用道具 举报

发表于 2020-7-2 00:38:58 | 显示全部楼层    本楼为最佳答案   



word = input('请输入要查找的长字符串:')


这里你不能用 input 哈,因为甲鱼哥的文本内容是很多行的,而 input 过程中你复制多行的时候会包括不可见字符 \n,Python 会认为你是要换行

导致自动帮你回车了,所以导致你就算复制了文本的全部内容,实际上运行时候也只计算了一行的字符串,那么多行的文本建议用三引号来多行字符串赋值,你后面学习到打开文件,那么就方便多了!

这个题目的正确思路应该是如何?


你其实可以用.count 方法来直接计算字符串中字符出现的次数,这样就不用在 for 循环里面在次嵌套个 for 循环,这样会导致效率很差滴~

参考甲鱼哥的代码吧~这个效率高了很多~
def find(word):
    list1 = []
    for each in word:
        if each not in list1:
            if each == '\n':
                print('\\n', word.count(each))
            else:
                print(each, word.count(each))
            list1.append(each)
    print(list1)

find(word)

for 循环主要用于遍历可迭代对象时候,或者确定循环次数的时候使用的

while 循环主要是用于条件判断 然后持续循环的

还有就是,循环嵌套时候要多加注意,尽量别在循环中进行多余的计算,有时你看上去就写了一行代码 实则循环了无数遍~~

其实小技巧什么的,还是得靠自己多加练习,到后头你理解的更为深入了,有的时候就会感觉当初的问题都不是问题了



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

使用道具 举报

 楼主| 发表于 2020-7-3 20:03:45 | 显示全部楼层
嗯,看来还是对各个函数的功能不够熟悉,要能选择合适的函数,就要对各个函数的功能和组合效果比较熟悉
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-7-3 20:19:35 | 显示全部楼层
Twilight6 发表于 2020-7-2 00:38
这里你不能用 input 哈,因为甲鱼哥的文本内容是很多行的,而 input 过程中你复制多行的时候会包 ...

还有一个地方有点不太明白,for each == '\n': each 不是在这种情况下是搜索单个字符的吗,为什么可以直接判断是否等于'\n'
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-20 03:43

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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