第19讲课后作业
def check(*path): ##①请问这里为什么会有*号呢,我试了下,不带*号,它只要变动就会输出printlength = 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
有大佬给解惑下吗 第二个问题打错了,是为什么是path[ i ] 参数*path说明传入的不只一个参数,而是一个path列表
下面path表示列表中的第i个参数,也就是第i个字符串
for k in path:就是遍历第i个字符串的各个字符,进行计数 昨非 发表于 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 10:58
参数*path说明传入的不只一个参数,而是一个path列表
下面path表示列表中的第i个参数,也就是第i个字符串
...
也就是加入一句字符串,j++ 张飞小拳拳 发表于 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:03
也就是加入一句字符串,j++
后面不是有j+=1吗 昨非 发表于 2021-2-27 11:06
为啥要改进j?
j只不过是循环次数的统计而已,path里有几个字符串,j在每次循环+1,结果就是几
没必要 ...
只是有这样一个想法,就想着实现输出的内容是第几个数据中共有数字?个,英文字母?个,空格?个,其他字符?个后续再有的话他会接着累加{:5_91:} 张飞小拳拳 发表于 2021-2-27 11:10
只是有这样一个想法,就想着实现输出的内容是第几个数据中共有数字?个,英文字母?个,空格?个,其他字 ...
不会的
print的结果是在for循环执行完后才执行的
也就是对应一个字符串只打印一次,而且是统计完成的结果
昨非 发表于 2021-2-27 11:08
后面不是有j+=1吗
这个J是个局部变量,调用完以后就释放了,所以每次输出都是结构体的初始数,也就是每次都是“第1个数据中共有数字?个,英文字母?个,空格?个,其他字符?个” 张飞小拳拳 发表于 2021-2-27 11:13
这个J是个局部变量,调用完以后就释放了,所以每次输出都是结构体的初始数,也就是每次都是“第1个数据中 ...
看清楚,j在 for i in range(length):下
不在 for k in path:下 昨非 发表于 2021-2-27 11:12
不会的
print的结果是在for循环执行完后才执行的
也就是对应一个字符串只打印一次,而且是统计完成的结 ...
实现不了,就算了,感谢大佬,可以帮忙看下下面的那部分吗,为什么我结束程序前还会输出一次结构体,我已经设置条件的,我的想法是输入 q就直接退出不调用结构体 昨非 发表于 2021-2-27 11:15
看清楚,j在 for i in range(length):下
不在 for k in path:下
emmm 不搞了 再次感谢大佬{:7_112:} 张飞小拳拳 发表于 2021-2-27 11:27
emmm 不搞了 再次感谢大佬
不是,你如果按照你最后的那种input输入的方法一个个字符串输入
那么定义函数时*path的设计就完全没作用了
因为*path的初衷时一次性传入多个字符串参数,一次性处理,
你一个个输入,必定只能一次统计一个啊 张飞小拳拳 发表于 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 11:34
至于你的上一个问题
我看了下,你的j的位置不对
应该放到上面(和cnt_digit,cnt_letter,cnt_space, ...
emmmm 这个我试过了,好像不起作用,可能确实是这个程序只支持的是一次放多个参数进去,而不支持一个一个的去输入 感谢 张飞小拳拳 发表于 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:05
你要想一个个输的话也可以,把*path改了,函数改成最一般的遍历单个字符串
函数里也不需要外层for循环了 ...
感觉像是缺少一个平衡点,要不就是输入q结束程序会多进一次结构体,要不就是第一个字符串不进结构体{:7_125:} 张飞小拳拳 发表于 2021-2-27 12:15
感觉像是缺少一个平衡点,要不就是输入q结束程序会多进一次结构体,要不就是第一个字符串不进结构体{:7_1 ...
你把最后一行函数调用换到cnt += 1上一行不就好了
页:
[1]
2