妙脆角 发表于 2021-1-13 14:13:02

python第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)

打印出来的结果是:
% 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
我的疑问是比如%出现了6104次, 打印的不是不是应该打印6104次么,为什么是 一个%,后面跟个6104这个数字,难道不是应该 6104个 %,后面跟个6104个数字么

昨非 发表于 2021-1-13 14:17:06

print(each, str1.count(each))
这里,each是字符
后面count出来的是次数
结果当然是你说的那种格式了

妙脆角 发表于 2021-1-13 14:19:50

昨非 发表于 2021-1-13 14:17
print(each, str1.count(each))
这里,each是字符
后面count出来的是次数


比如说%,他遍历了6104个%,不应该打印6104个% 么,为什么只打印了1个

逃兵 发表于 2021-1-13 14:21:07

.count()方法返回的是该元素出现的次数,类型是int
>>> string = 'abbcccdddd'
>>> string.count('a')
1
>>> string.count('b')
2
>>> string.count('c')
3
>>> string.count('d')
4
>>> type(string.count('d'))
<class 'int'>

昨非 发表于 2021-1-13 14:21:37

妙脆角 发表于 2021-1-13 14:19
比如说%,他遍历了6104个%,不应该打印6104个% 么,为什么只打印了1个

遍历的过程只改变了str.count的值
并不打印字符
真正打印字符的只有最后一次

jackz007 发表于 2021-1-13 14:28:24

本帖最后由 jackz007 于 2021-1-13 14:37 编辑

            print(each, str1.count(each))
      打印出来的信息应该 "长" 什么样由上面这条语句决定。
      这个 print() 先打印 each,就是被统计的字符,然后是一个空格(print() 多参数打印时,会自动在各个参数的输出内容之间添加一个空格进行分隔),然后是 str1 . count(each),就是一个数字。
      当然,也可以按你所希望的样子来输出信息,代码就得改动了:
str1 = '''拷贝过来的字符串'''
list1 = []

for each in str1:
    if each not in list1:
      if each == '\n':
            print(str1 . count(each) , '个 \\n')
      else
            print(str1 . count(each) ,'个' , each)
      不过,这样打印出来看上去会很乱,不如原来的那样,十分的整齐,前面是字符,后面是统计个数。

妙脆角 发表于 2021-1-13 14:53:49

昨非 发表于 2021-1-13 14:21
遍历的过程只改变了str.count的值
并不打印字符
真正打印字符的只有最后一次

我就是想知道遍历的过程为什么不打印字符了{:5_109:}

昨非 发表于 2021-1-13 14:57:52

妙脆角 发表于 2021-1-13 14:53
我就是想知道遍历的过程为什么不打印字符了

你所说的遍历(计数)的过程是在count函数内部完成的
在你控制的循环遍历(for)中,
只对新出现的字符进行了计数并加入列表存储
而已经计数过的,都被if语句给pass了
页: [1]
查看完整版本: python第20讲 动动手第一题