鱼C论坛

 找回密码
 立即注册
查看: 1096|回复: 9

[已解决]20讲,我的程序不显示错误,但是也没有结果

[复制链接]
发表于 2020-3-21 14:40:48 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
#请用已学过的知识编写程序,统计下边这个长字符串("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[i]!=string[j]:
           time+=1                #累计不相等的次数
    if time==i:                   #确保每一次判断都不相等
          catalogue.append(string[i])
         

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


最佳答案
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
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-3-21 14:58:36 | 显示全部楼层
你想统计出有多少种类字符那里用的方法逻辑不通。正确的思路是查找出来一个字符就放在一个列表里,然后每一个字符通过if 字符 not in 列表的语句将后续不重复的字符放入列表,而你的方法实在没看懂。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

我明白你的意思,我之前没想到这个,确实简洁很多,
我的思路其实就是先判断有多少种字符,并且不重复的把字符存在catalaogue列表里面,然后再进一步循环计数,但是是什么地方有问题呢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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[s[i]] = d . get(s[i] , 0) + 1
for k , v in d . items() :
    if k == '\n' : k = '\\n'
    else : k = ' ' + k
    print(k , v)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-21 15:35:07 | 显示全部楼层

老师,您的代码超出我的认知了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-21 15:39:55 | 显示全部楼层
本帖最后由 Hoiste 于 2020-3-21 15:42 编辑
猪猪虾 发表于 2020-3-21 15:09
我明白你的意思,我之前没想到这个,确实简洁很多,
我的思路其实就是先判断有多少种字符,并且不重复的 ...


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

记住,能用成员操作符检测的就别用那么多遍历,会非常慢的,这点在后面求二十万以内质数的时候你会体会到有多慢。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-21 15:47:38 | 显示全部楼层
本来想帮你跑跑看是不是有其他问题,但我看到下面你又用了一个双for循环遍历。。。还是建议全部改成成员操作符来完成吧。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-21 15:52:12 | 显示全部楼层

这可能就是菜鸟和大神的区别
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-25 05:38

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表