猪猪虾 发表于 2020-3-21 14:40:48

20讲,我的程序不显示错误,但是也没有结果

#请用已学过的知识编写程序,统计下边这个长字符串("string1')中各个字符出现的次数
import sys
f=open(r"C:\Users\Administrator\Desktop\python\string1.txt","r")
string=f.read()
catalogue=[]                      #存放字符种类


#****************以下程序目的是为了先寻找出有多少种字符*********************

time=0
for i in range(len(string)):      #循环每走一次,都要将当前的字符与此字符以前的所有字符进行比较,如果之前出现过
    for j in range(i):            #则字符种类不再累加,确保不会重复累加字符种类
      if string!=string:
         time+=1                #累计不相等的次数
    if time==i:                   #确保每一次判断都不相等
          catalogue.append(string)
         

#*********************统计各个字符出现的次数*******************************
#在已经知道字符串的类别(catalogue存放
count_string=
count_string=count_string*len(catalogue)#创建一个和catalogue同等长度的列表,且存放起始值都为0
for m in range(len(catalogue)):
    for n in range(len(string)):
      if catalogue==string:
            count_string+=1
            
print(catalogue)
print(count_string)


Hoiste 发表于 2020-3-21 14:58:36

你想统计出有多少种类字符那里用的方法逻辑不通。正确的思路是查找出来一个字符就放在一个列表里,然后每一个字符通过if 字符 not in 列表的语句将后续不重复的字符放入列表,而你的方法实在没看懂。。。

Hoiste 发表于 2020-3-21 15:02:09

我看了一下20讲没要求用文件打开,其实就算用文件打开方法也没这么复杂,看看这个吧:
string = '字符串部分我就省略了'

def find():
    print(string.count(each))

i = 0
for each in string:
    if each not in string[:i - 1]:
      print(each,'的数量:',end = '')
      find()
    i += 1

猪猪虾 发表于 2020-3-21 15:09:44

Hoiste 发表于 2020-3-21 14:58
你想统计出有多少种类字符那里用的方法逻辑不通。正确的思路是查找出来一个字符就放在一个列表里,然后每一 ...

我明白你的意思,我之前没想到这个,确实简洁很多,
我的思路其实就是先判断有多少种字符,并且不重复的把字符存在catalaogue列表里面,然后再进一步循环计数,但是是什么地方有问题呢

jackz007 发表于 2020-3-21 15:28:25

本帖最后由 jackz007 于 2020-3-21 15:30 编辑

f = open(r"C:\Users\Administrator\Desktop\python\string1.txt")
s , d = '' . join(list(f)) , {}
f . close()
for i in range(len(s)) : d] = d . get(s , 0) + 1
for k , v in d . items() :
    if k == '\n' : k = '\\n'
    else : k = ' ' + k
    print(k , v)

猪猪虾 发表于 2020-3-21 15:35:07

jackz007 发表于 2020-3-21 15:28


老师,您的代码超出我的认知了{:5_96:}

Hoiste 发表于 2020-3-21 15:39:55

本帖最后由 Hoiste 于 2020-3-21 15:42 编辑

猪猪虾 发表于 2020-3-21 15:09
我明白你的意思,我之前没想到这个,确实简洁很多,
我的思路其实就是先判断有多少种字符,并且不重复的 ...

我想可能不是没打印出来的问题,你这个方法步骤比较繁琐,可能电脑运算比较慢,要等一段时间才会出来结果,确定你的程序在run之后是不是还在运行,如果是,那么就是计算机还在跑你的代码。

记住,能用成员操作符检测的就别用那么多遍历,会非常慢的,这点在后面求二十万以内质数的时候你会体会到有多慢。

Hoiste 发表于 2020-3-21 15:47:38

本来想帮你跑跑看是不是有其他问题,但我看到下面你又用了一个双for循环遍历。。。还是建议全部改成成员操作符来完成吧。。。

猪猪虾 发表于 2020-3-21 15:50:38

Hoiste 发表于 2020-3-21 15:47
本来想帮你跑跑看是不是有其他问题,但我看到下面你又用了一个双for循环遍历。。。还是建议全部改成成员操 ...

{:5_99:}好

猪猪虾 发表于 2020-3-21 15:52:12

猪猪虾 发表于 2020-3-21 15:50


这可能就是菜鸟和大神的区别{:5_104:}
页: [1]
查看完整版本: 20讲,我的程序不显示错误,但是也没有结果