鱼C论坛

 找回密码
 立即注册
查看: 2553|回复: 21

[已解决]第19讲课后作业

[复制链接]
发表于 2021-2-27 10:50:29 | 显示全部楼层 |阅读模式

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

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

x
def check(*path):         ##①请问这里为什么会有*号呢,我试了下,不带*号,它只要变动就会输出print
   length = len(path)
   for i in range(length):
      cnt_digit,cnt_letter,cnt_space,cnt_others = 0,0,0,0
      for k in path[i]:      ##②请问这里为什么是path[i]呢
         j = 1
         if k.isalpha():
            cnt_letter += 1
         elif k.isdigit():
            cnt_digit += 1
         elif k == ' ':
            cnt_space += 1
         else:
            cnt_others += 1
      print('第%d个数据中共有数字%d个,英文字母%d个,空格%d个,其他字符%d个'%(j,cnt_digit,cnt_letter,cnt_space,cnt_others))
      j += 1
cnt = 1
path = input('请输入第{}个字符串:'.format(cnt))
check(path)
while 1 :
   if path == 'q':
      print('程序结束')
      break
   else:
      cnt += 1
      path = input('请输入第{}个字符串:'.format(cnt))
      check(path)


####③我想实现输入一个字符串就会记录一次,print那边的输出内容 +1   局部变量用完就释放了 要怎么设计呢
④整体想实现输入字符串运行结构体,输入 q 不运行结构体,但是我当前的这个  输入q 以后还是会走结构体  然后才break
有大佬给解惑下吗
最佳答案
2021-2-27 10:58:50
参数*path说明传入的不只一个参数,而是一个path列表
下面path[i]表示列表中的第i个参数,也就是第i个字符串
for k in path[i]:就是遍历第i个字符串的各个字符,进行计数
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2021-2-27 10:51:57 | 显示全部楼层
第二个问题打错了,是为什么是path[ i ]
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-2-27 10:58:50 | 显示全部楼层    本楼为最佳答案   
参数*path说明传入的不只一个参数,而是一个path列表
下面path[i]表示列表中的第i个参数,也就是第i个字符串
for k in path[i]:就是遍历第i个字符串的各个字符,进行计数
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-2-27 11:01:47 | 显示全部楼层
昨非 发表于 2021-2-27 10:58
参数*path说明传入的不只一个参数,而是一个path列表
下面path表示列表中的第i个参数,也就是第i个字符串
...

print('第%d个数据中共有数字%d个,英文字母%d个,空格%d个,其他字符%d个'%(j,cnt_digit,cnt_letter,cnt_space,cnt_others))
那请问这句里面的 j 有方法改进吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-2-27 11:03:14 | 显示全部楼层
昨非 发表于 2021-2-27 10:58
参数*path说明传入的不只一个参数,而是一个path列表
下面path表示列表中的第i个参数,也就是第i个字符串
...

也就是加入一句字符串,j++
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-2-27 11:06:23 | 显示全部楼层
张飞小拳拳 发表于 2021-2-27 11:01
print('第%d个数据中共有数字%d个,英文字母%d个,空格%d个,其他字符%d个'%(j,cnt_digit,cnt_letter,cn ...

为啥要改进j?
j只不过是循环次数的统计而已,path里有几个字符串,j在每次循环+1,结果就是几
没必要变动啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-2-27 11:08:16 | 显示全部楼层
张飞小拳拳 发表于 2021-2-27 11:03
也就是加入一句字符串,j++

后面不是有j+=1吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-2-27 11:10:14 | 显示全部楼层
昨非 发表于 2021-2-27 11:06
为啥要改进j?
j只不过是循环次数的统计而已,path里有几个字符串,j在每次循环+1,结果就是几
没必要 ...

只是有这样一个想法,就想着实现输出的内容是第几个数据中共有数字?个,英文字母?个,空格?个,其他字符?个  后续再有的话  他会接着累加
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-2-27 11:12:27 | 显示全部楼层
张飞小拳拳 发表于 2021-2-27 11:10
只是有这样一个想法,就想着实现输出的内容是第几个数据中共有数字?个,英文字母?个,空格?个,其他字 ...

不会的
print的结果是在for循环执行完后才执行的
也就是对应一个字符串只打印一次,而且是统计完成的结果

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

使用道具 举报

 楼主| 发表于 2021-2-27 11:13:58 | 显示全部楼层
昨非 发表于 2021-2-27 11:08
后面不是有j+=1吗

这个J是个局部变量,调用完以后就释放了,所以每次输出都是结构体的初始数,也就是每次都是“第1个数据中共有数字?个,英文字母?个,空格?个,其他字符?个”
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-2-27 11:15:24 | 显示全部楼层
张飞小拳拳 发表于 2021-2-27 11:13
这个J是个局部变量,调用完以后就释放了,所以每次输出都是结构体的初始数,也就是每次都是“第1个数据中 ...

看清楚,j在 for i in range(length):下
不在 for k in path[i]:下
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-2-27 11:17:38 | 显示全部楼层
昨非 发表于 2021-2-27 11:12
不会的
print的结果是在for循环执行完后才执行的
也就是对应一个字符串只打印一次,而且是统计完成的结 ...

实现不了,就算了,感谢大佬,可以帮忙看下下面的那部分吗,为什么我结束程序前还会输出一次结构体,我已经设置条件的,我的想法是输入 q  就直接退出不调用结构体
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-2-27 11:27:38 | 显示全部楼层
昨非 发表于 2021-2-27 11:15
看清楚,j在 for i in range(length):下
不在 for k in path:下

emmm   不搞了   再次感谢大佬
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-2-27 11:33:07 | 显示全部楼层
张飞小拳拳 发表于 2021-2-27 11:27
emmm   不搞了   再次感谢大佬

不是,你如果按照你最后的那种input输入的方法一个个字符串输入
那么定义函数时*path的设计就完全没作用了

因为*path的初衷时一次性传入多个字符串参数,一次性处理,
你一个个输入,必定只能一次统计一个啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-2-27 11:34:58 | 显示全部楼层
张飞小拳拳 发表于 2021-2-27 11:27
emmm   不搞了   再次感谢大佬


至于你的上一个问题
我看了下,你的j的位置不对
应该放到上面(和  cnt_digit,cnt_letter,cnt_space,cnt_others = 0,0,0,0放到一起)
前者对应第几个字符串,后者对应该字符串的各个字符统计结果
      j = 1   #移到上一层
      for k in path[i]:   

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

使用道具 举报

 楼主| 发表于 2021-2-27 12:01:49 | 显示全部楼层
昨非 发表于 2021-2-27 11:34
至于你的上一个问题
我看了下,你的j的位置不对
应该放到上面(和  cnt_digit,cnt_letter,cnt_space, ...

emmmm     这个我试过了,好像不起作用,可能确实是这个程序只支持的是一次放多个参数进去,而不支持一个一个的去输入    感谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-2-27 12:05:09 | 显示全部楼层
张飞小拳拳 发表于 2021-2-27 12:01
emmmm     这个我试过了,好像不起作用,可能确实是这个程序只支持的是一次放多个参数进去,而不支持一个 ...

你要想一个个输的话也可以,把*path改了,函数改成最一般的遍历单个字符串
函数里也不需要外层for循环了

函数外的东西不用大改,只需要把
cnt = 1
path = input('请输入第{}个字符串:'.format(cnt))
check(path)           
while 1 :
   if path == 'q':
      print('程序结束')
      break
   else:
      cnt += 1
      path = input('请输入第{}个字符串:'.format(cnt))
      check(path)

标红的那行删掉即可
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-2-27 12:12:21 | 显示全部楼层
标红的那行删了的话,第一次输入的字符串就不会进结构体了,这个我也试过了{手动狗头}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-2-27 12:15:20 | 显示全部楼层
昨非 发表于 2021-2-27 12:05
你要想一个个输的话也可以,把*path改了,函数改成最一般的遍历单个字符串
函数里也不需要外层for循环了 ...

感觉像是缺少一个平衡点,要不就是输入q结束程序会多进一次结构体,要不就是第一个字符串不进结构体
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-2-27 12:17:38 | 显示全部楼层
张飞小拳拳 发表于 2021-2-27 12:15
感觉像是缺少一个平衡点,要不就是输入q结束程序会多进一次结构体,要不就是第一个字符串不进结构体{:7_1 ...

你把最后一行函数调用换到cnt += 1上一行不就好了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-16 10:11

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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