yz7268913 发表于 2020-7-2 00:14:24

20讲课后作业动动手 求助

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
            ifs == list1:
                flags += 1
                list1.remove(list1)
                lenth -= 1
      print('符号',s,'出现了',flags,'次')
    print('小甲鱼的话是:',list1)
   
find(word)

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

Twilight6 发表于 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 循环主要是用于条件判断 然后持续循环的

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

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



yz7268913 发表于 2020-7-3 20:03:45

嗯,看来还是对各个函数的功能不够熟悉,要能选择合适的函数,就要对各个函数的功能和组合效果比较熟悉

yz7268913 发表于 2020-7-3 20:19:35

Twilight6 发表于 2020-7-2 00:38
这里你不能用 input 哈,因为甲鱼哥的文本内容是很多行的,而 input 过程中你复制多行的时候会包 ...

还有一个地方有点不太明白,for each == '\n': each 不是在这种情况下是搜索单个字符的吗,为什么可以直接判断是否等于'\n'
页: [1]
查看完整版本: 20讲课后作业动动手 求助