鱼C论坛

 找回密码
 立即注册
查看: 2518|回复: 17

一个关于计数的问题

[复制链接]
发表于 2016-2-5 18:53:57 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 冬雪雪冬 于 2016-2-5 21:24 编辑
  1. filename = input('请输入文件名:')
  2. f = open(filename)
  3. word = input('请输入需要查找的单词或字符:')
  4. count = 0
  5. list1 = []

  6. for eachline in f:
  7.     list1.append(eachline)

  8. for i in range(len(list1)):
  9.     if list1[i] == word:
  10.         count += 1

  11. print ('文件 中共有 %d 个 【%s】'  %   (count,word))
复制代码

  1.    f_read = open(file_name)

  2.     content = []
  3.     count = 0

  4.     for eachline in f_read:
  5.         if rep_word in eachline:
  6.             count = eachline.count(rep_word)
  7.         content.append(eachline)   
复制代码



这两个代码对同一个数据,算出来的count的结果为什么不一样呢。。。数据在下面,我想计算有几个5,第一个算出来是2个,第二个是1个。。。。但是问题出在哪里呢?

捕获.PNG
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2016-2-5 19:44:31 | 显示全部楼层
程序2,for eachline in f_read:读到第5行时count=1,读到第15行时count又赋值1,不会将2个count累加。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-2-5 19:48:13 | 显示全部楼层
冬雪雪冬 发表于 2016-2-5 19:44
程序2,for eachline in f_read:读到第5行时count=1,读到第15行时count又赋值1,不会将2个count累加。

改了一下这两个程序,你看一下嘛
  1. filename = input('请输入文件名:')
  2. f = open(filename,'r')
  3. word = input('请输入需要查找的单词或字符:')
  4. count = 0

  5. for eachline in f:
  6.    if word in eachline:
  7.        count = eachline.count(word)
  8. print ('文件 %s 中共有 %d 个 【%s】'  %   (filename,count,word))
复制代码



  1. filename = input('请输入文件名:')
  2. f = open(filename,'r')
  3. word = input('请输入需要查找的单词或字符:')
  4. count = 0

  5. for eachline in f:
  6.    if word in eachline:
  7.        count +=1
  8. print ('文件 %s 中共有 %d 个 【%s】'  %   (filename,count,word))
复制代码




这两个代码有啥区别?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-2-5 19:52:31 | 显示全部楼层
程序2,读到5时count加一变为1,读到15时count加一变为2.
程序1,读到5时count等于1,读到15时count再次赋值为1
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-2-5 19:54:54 | 显示全部楼层
冬雪雪冬 发表于 2016-2-5 19:52
程序2,读到5时count加一变为1,读到15时count加一变为2.
程序1,读到5时count等于1,读到15时count再次赋 ...

这是为什么呢????是不是第一个程序只是去 查找‘5’这个数字,而第二程序认为‘15’也含有‘5’这个数字?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-2-5 19:58:39 | 显示全部楼层
两个程序都用word in eachline,所以5和15都读到。
程序1改为count += eachline.count(word)就行了。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-2-5 20:05:10 | 显示全部楼层
冬雪雪冬 发表于 2016-2-5 19:58
两个程序都用word in eachline,所以5和15都读到。
程序1改为count += eachline.count(word)就行了。

但是这个也不是我想要的结果啊。。。我的确是 只希望它能够找到我有多少个‘5’ ,但 ‘15’不能算作‘5’里面啊。。。而且如果 再其他一行再一次加入一个‘5’的话,程序1依然只能算一行有多少个‘5’而没办法算一共有多少‘5’
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-2-5 20:12:51 | 显示全部楼层
如果用in就会把所有的5,15,25等都找出了。
如果仅要找到5还得用==,因读取文件后会在每行后面多个\n,注意比较相等前先去掉。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-2-5 20:18:30 | 显示全部楼层
冬雪雪冬 发表于 2016-2-5 20:12
如果用in就会把所有的5,15,25等都找出了。
如果仅要找到5还得用==,因读取文件后会在每行后面多个\n,注 ...

要怎么去掉啊?我试了半天都不会。。。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-2-5 20:25:00 | 显示全部楼层
  1. a = '5\n'
  2. b = a.replace('\n', '')
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-2-5 20:35:49 | 显示全部楼层

如果是一个列表呢
list1=['1\n', '2\n', '3\n', '4\n', '5\n', '6\n', '7\n', '8\n', '9\n', '10\n', '11\n', '12\n', '13\n', '14\n', '15\n', '16\n', '17\n', '18\n', '\n']
这样的要怎么替换呢
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-2-5 20:41:29 | 显示全部楼层
你不是已经用for eachline in f: 分解成一个个字符串了吗?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-2-5 20:43:17 | 显示全部楼层
如果想把列表中的都修改可以:
list2 = [i.replace('\n', '') for i in list1]
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-2-5 21:13:09 | 显示全部楼层
冬雪雪冬 发表于 2016-2-5 20:41
你不是已经用for eachline in f: 分解成一个个字符串了吗?

那我如果找到了,又想把 '/n'再加回去该咋办呢?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-2-5 21:18:57 | 显示全部楼层
可以用字符串的+运算。
更简单的方法:
‘5\n' == eachline’
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-2-5 21:23:25 | 显示全部楼层
冬雪雪冬 发表于 2016-2-5 21:18
可以用字符串的+运算。
更简单的方法:
‘5\n' == eachline’

哈哈。。。。我终于弄好了。。。谢谢大神啊~~~今天弄了一下午加一晚上了。。。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-2-5 21:25:27 | 显示全部楼层
做出就好。不断的修改不断的磨合,逐渐提高编程能力。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-2-6 19:18:02 | 显示全部楼层
冬雪雪冬 发表于 2016-2-5 21:25
做出就好。不断的修改不断的磨合,逐渐提高编程能力。

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-2-19 13:52

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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