张飞小拳拳 发表于 2021-2-27 10:50:29

第19讲课后作业

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:      ##②请问这里为什么是path呢
         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:51:57

第二个问题打错了,是为什么是path[ i ]

昨非 发表于 2021-2-27 10:58:50

参数*path说明传入的不只一个参数,而是一个path列表
下面path表示列表中的第i个参数,也就是第i个字符串
for k in path:就是遍历第i个字符串的各个字符,进行计数

张飞小拳拳 发表于 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 有方法改进吗

张飞小拳拳 发表于 2021-2-27 11:03:14

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

也就是加入一句字符串,j++

昨非 发表于 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,结果就是几
没必要变动啊

昨非 发表于 2021-2-27 11:08:16

张飞小拳拳 发表于 2021-2-27 11:03
也就是加入一句字符串,j++

后面不是有j+=1吗

张飞小拳拳 发表于 2021-2-27 11:10:14

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

只是有这样一个想法,就想着实现输出的内容是第几个数据中共有数字?个,英文字母?个,空格?个,其他字符?个后续再有的话他会接着累加{:5_91:}

昨非 发表于 2021-2-27 11:12:27

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

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

张飞小拳拳 发表于 2021-2-27 11:13:58

昨非 发表于 2021-2-27 11:08
后面不是有j+=1吗

这个J是个局部变量,调用完以后就释放了,所以每次输出都是结构体的初始数,也就是每次都是“第1个数据中共有数字?个,英文字母?个,空格?个,其他字符?个”

昨非 发表于 2021-2-27 11:15:24

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

看清楚,j在 for i in range(length):下
不在 for k in path:下

张飞小拳拳 发表于 2021-2-27 11:17:38

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

实现不了,就算了,感谢大佬,可以帮忙看下下面的那部分吗,为什么我结束程序前还会输出一次结构体,我已经设置条件的,我的想法是输入 q就直接退出不调用结构体

张飞小拳拳 发表于 2021-2-27 11:27:38

昨非 发表于 2021-2-27 11:15
看清楚,j在 for i in range(length):下
不在 for k in path:下

emmm   不搞了   再次感谢大佬{:7_112:}

昨非 发表于 2021-2-27 11:33:07

张飞小拳拳 发表于 2021-2-27 11:27
emmm   不搞了   再次感谢大佬

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

因为*path的初衷时一次性传入多个字符串参数,一次性处理,
你一个个输入,必定只能一次统计一个啊

昨非 发表于 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:   

张飞小拳拳 发表于 2021-2-27 12:01:49

昨非 发表于 2021-2-27 11:34
至于你的上一个问题
我看了下,你的j的位置不对
应该放到上面(和cnt_digit,cnt_letter,cnt_space, ...

emmmm   这个我试过了,好像不起作用,可能确实是这个程序只支持的是一次放多个参数进去,而不支持一个一个的去输入    感谢

昨非 发表于 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)

标红的那行删掉即可

张飞小拳拳 发表于 2021-2-27 12:12:21

标红的那行删了的话,第一次输入的字符串就不会进结构体了,这个我也试过了{手动狗头}

张飞小拳拳 发表于 2021-2-27 12:15:20

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

感觉像是缺少一个平衡点,要不就是输入q结束程序会多进一次结构体,要不就是第一个字符串不进结构体{:7_125:}

昨非 发表于 2021-2-27 12:17:38

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

你把最后一行函数调用换到cnt += 1上一行不就好了
页: [1] 2
查看完整版本: 第19讲课后作业