4399king 发表于 2020-8-6 19:10:51

python作业求助

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)


那个\\n是什么,为啥我把\\n改成\n结果也一样

weiter 发表于 2020-8-6 19:12:48

本帖最后由 weiter 于 2020-8-6 19:14 编辑

\ 是转义符
\\ 就是用转义符转义转义符,这样是解除 \ 的特殊含义,让 \ 变成可以打印出来的普通字符

\n 是用于输出换行
\\n 是用于输出 \n 这个字符串

Twilight6 发表于 2020-8-6 19:12:59

本帖最后由 Twilight6 于 2020-8-6 19:16 编辑


结果一样是因为你测试的字符串没有多行字符,所以没有 \n 字符

只要你的字符串大于 1 行,那么结果一定不一样的,\\n 是将 \ 转义了,才能使得 \n 成功打印

也就是因为 each 循环到换行符\n的时候,我们直接打印 each 会导致换行,所以统计 \n 换行符时候要将这个字符单独 if 判断并列出打印

需要转义后才能成功打印出 \n ,如果没转义,那么是个换行的效果

4399king 发表于 2020-8-6 19:34:44

Twilight6 发表于 2020-8-6 19:12
结果一样是因为你测试的字符串没有多行字符,所以没有 \n 字符

只要你的字符串大于 1 行,那么结果一 ...

str1='拷贝过来的字符串
拷贝过来的字符串
拷贝过来的字符串'

为啥结果不是这样:
拷 3
贝 3
过 3
来 3
的 3
字 3
串 3
\n 2
符 3
拷 3
贝 3
过 3
来 3
的 3
字 3
串 3
\n 2
符 3
拷 3
贝 3
过 3
来 3
的 3
字 3
串 3
\n 2
符 3

为啥不是向上面那样,按理说第一次遇到’拷‘的时候就已经统计了出现次数并打印一次‘拷 3’,那么下一次再轮到第二个‘拷’,就应该又打印一次‘拷 3’。对吗

zltzlt 发表于 2020-8-6 19:45:12

4399king 发表于 2020-8-6 19:34
str1='拷贝过来的字符串
拷贝过来的字符串
拷贝过来的字符串'


不是,因为每打印一次都会把 each 添加到 list1 中,然后下次判断 each 在不在 list1 中,如果存在于 list1 就代表这个元素已经打印过了,就不再打印了。

Twilight6 发表于 2020-8-6 19:54:21

4399king 发表于 2020-8-6 19:34
str1='拷贝过来的字符串
拷贝过来的字符串
拷贝过来的字符串'



为啥不是向上面那样,按理说第一次遇到’拷‘的时候就已经统计了出现次数并打印一次‘拷 3’,那么下一次再轮到第二个‘拷’,就应该又打印一次‘拷 3’。对吗

不对哈,因为每次统计完字符,就会将这个字符加到列表进去,而因为你的 if 判断不在列表内的字符

才开始打印,所以每个字符只打印一次, count 直接统计了这个字符串的所有字符的个数了
页: [1]
查看完整版本: python作业求助