时光时光 发表于 2016-11-16 23:25:44

第20课 作业 动动手中的 疑问

用已学过的只是编写程序,统计下边这个长字符串中各个字符出现的次数并找到小甲鱼送给大家的一句话

str1 = '''好多字符就不复制了'''
list1 = []

for each in str1:
    if each not in list1:
      if each == '\n':
            print('\\n', str1.count(each))
      else:
            print(each, str1.count(each))
      list1.append(each)

麻烦给一步一步讲解下吧看不懂了。。。0基础初学者,多谢多谢

人zai旅途 发表于 2016-11-16 23:25:45

本帖最后由 人zai旅途 于 2016-11-17 00:04 编辑

str1 = '''拷贝过来的字符串''' # 将字符串赋值给str1
list1 = []       # 先创建一个空的列表,为了后面将字符串一个一个装进去
             #下面是一个for循环
for each in str1:         # each表示每一个来自str1的字符,每一个字符,会走一遍后边的代码
    if each not in list1:    # 如果每一次,each不在list1中,也就是说不能重复统计,已经装进列表的就不统计了
      if each == '\n':    # 如果每一次,each等于'\n',就是换行符,换行符也是一个字符,只不过在str1看不见
            print('\\n', str1.count(each)) # 统计'\n'的时候,打印(\n,次数);这里'\\n',第一个\表示强制转义;str1.count(each)表示统计str1中             each出现的次数
      else:       # 条件语句,除了统计'\n'的时候,需要按照上面的方式处理,其余的字符都要按照下面的方式处理
            print(each, str1.count(each)) # 打印 (字符本身,出现的次数)
      list1.append(each)    # 统计完了以后,把这个each加入到列表list1中(因为有if each not in list1,这句,起到了重复字符筛选的作用,所以列表中字符不重复)

      >>>
RESTART: C:/Users/Administrator/Desktop/统计字符.py
% 6104
$ 6046
@ 6157
_ 6112
^ 6030
# 6115
) 6186
& 6043
! 6079
+ 6066
] 6152
* 6034
} 6105
[ 6108
( 6154
{ 6046
\n 1219
G 1
O 2
D 1
L 1
U 1
C 1
K 1
>>> list1
['%', '$', '@', '_', '^', '#', ')', '&', '!', '+', ']', '*', '}', '[', '(', '{', '\n', 'G', 'O', 'D', 'L', 'U', 'C', 'K']
>>>


      

人zai旅途 发表于 2016-11-17 00:06:53

楼主看看我的回复是否还有不明白的,可以继续交流哈

满意设置最佳答案哈!!

会抓贼的老托比 发表于 2016-11-17 08:03:51

跟着学习!

三少爷 发表于 2016-11-17 08:09:43

你要思考如果是你如何判断字符重复的问题。。。

SSSpython 发表于 2016-11-17 09:17:23

过来学习,不过这类问题还是自己要看懂,然后自己动手写一个,才能知道自己哪个地方不懂,新上不能急,还是一步步来比较好

小茗同学 发表于 2016-11-17 10:08:27

一楼的答案好清楚

Damn_it 发表于 2016-11-17 10:36:21

首先for each in str1: 这句话是遍历整个字符串,
然后if each not in list1:这句话判断each是否已存在列表list1当中,
       1 如果存在,就跳过下面的语句,继续下一次循环,
      
       2 如果不存在,再判断是否为'\n'
                            如果是,就'\n'和'\n'在str1中的出现次打印出来
                            如果不是,也要打印字符each和each在str1中的出现次打印出来

这里判断'\n'是因为它是非显示字符,需要另行处理,不然的话,直接打印会换行
如果还是不理解,那就@我吧{:10_254:}

时光时光 发表于 2016-11-17 21:19:46

人zai旅途 发表于 2016-11-17 00:01
str1 = '''拷贝过来的字符串'''   # 将字符串赋值给str1
list1 = []         # 先创建一个空的列表,为了 ...

感谢感谢啊你学的真好,我前面学的还是不好啊 非常感谢你的讲解,很详细

时光时光 发表于 2016-11-17 21:22:26

三少爷 发表于 2016-11-17 08:09
你要思考如果是你如何判断字符重复的问题。。。

恩恩非常感谢你 正确引导我的思路多谢!

时光时光 发表于 2016-11-17 21:23:50

SSSpython 发表于 2016-11-17 09:17
过来学习,不过这类问题还是自己要看懂,然后自己动手写一个,才能知道自己哪个地方不懂,新上不能急,还是 ...

是呀 得动手才行加油加油吧!{:5_92:}

人zai旅途 发表于 2016-11-17 21:25:14

时光时光 发表于 2016-11-17 21:19
感谢感谢啊你学的真好,我前面学的还是不好啊 非常感谢你的讲解,很详细

不客气,满意就设置个最佳答案,主要是技术值。{:5_90:}

时光时光 发表于 2016-11-17 21:26:54

Damn_it 发表于 2016-11-17 10:36
首先for each in str1: 这句话是遍历整个字符串,
然后if each not in list1:这句话判断each是否已存在列表 ...

非常非常感谢,个人原因没及时看回复,最佳 只能选个最早的满意答案了,依然感谢感谢你!!

时光时光 发表于 2016-11-17 21:28:11

人zai旅途 发表于 2016-11-17 21:25
不客气,满意就设置个最佳答案,主要是技术值。

当然当然{:5_92:}

人zai旅途 发表于 2016-11-17 21:31:52

谢谢楼主信任。
我也是零基础学习的,现在是第二轮进行到函数、递归,越往后边越难,关键是除了视频,还要动脑自己思考,动手写写看,再就是课后题,最好每题都搞懂,不过课后题有点坑的是,都会用到后面的知识{:10_251:}

Damn_it 发表于 2016-11-17 23:15:54

{:10_254:}

时光时光 发表于 2016-11-17 23:28:41

人zai旅途 发表于 2016-11-17 21:31
谢谢楼主信任。
我也是零基础学习的,现在是第二轮进行到函数、递归,越往后边越难,关键是除了视频,还要 ...

非常感谢你的讲解 和你传授的学习方法我努力{:5_106:}

Saint_HUFS 发表于 2020-4-15 13:16:13

谢谢看懂了很详细的讲解
页: [1]
查看完整版本: 第20课 作业 动动手中的 疑问