鱼C论坛

 找回密码
 立即注册
查看: 1598|回复: 13

[已解决]关于input与收集参数 带有逗号的字符串

[复制链接]
发表于 2022-3-12 17:29:38 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 Jerry~Mouse 于 2022-3-12 17:31 编辑

def count(*strx):
    lenth = len(strx)
    for i in range(lenth):
        Flag_num = 0
        Flag_str = 0
        Flag_space = 0
        Flag_other = 0
        for each in strx[i]:
            if each.isdigit() == True:
                Flag_num += 1
            elif each.isalpha() == True:
                Flag_str += 1
            elif each.isspace() == True:
                Flag_space += 1
            else:
                Flag_other += 1
        print("第%d个字符串中共有:英文字母%d个,数字%d个,空格%d个,其他字符%d个" % (i + 1,Flag_str,Flag_num,Flag_space,Flag_other))

test = eval(input("请输入字符串"))
count(*test)

input为 xiatiya1234.on,,cahuf,hahahacurrenjiang  q124

但是却是错误的SyntaxError: invalid syntax
这个要怎么做到一次性传入多个收集参数呢?(这里我想传入两个参数 三个逗号中只有最后一个是用来分隔两个参数的)
请问怎么解决呢
最佳答案
2022-3-12 17:56:01
本帖最后由 isdkz 于 2022-3-12 18:01 编辑

def count(*strx):
    lenth = len(strx)
    for i in range(lenth):
        Flag_num = 0
        Flag_str = 0
        Flag_space = 0
        Flag_other = 0
        for each in strx[i]:                       # 这里少了个 i
            if each.isdigit() == True:
                Flag_num += 1
            elif each.isalpha() == True:
                Flag_str += 1
            elif each.isspace() == True:
                Flag_space += 1
            else:
                Flag_other += 1
        print("第%d个字符串中共有:英文字母%d个,数字%d个,空格%d个,其他字符%d个" % (i + 1,Flag_str,Flag_num,Flag_space,Flag_other))

test = eval(input("请输入字符串"))
count(*test)

你用 eval 得输入符合 python语法的表达式,用 split 也可以,

不过 字符串的 split 方法会按给定字符串来分割,比如 .split(','),它会根据所有逗号分割,

也就是无法统计所有逗号,两个相邻的逗号之间还会分割出一个空字符串,

用 eval 的话你得这样输入,在字符串两边加上引号,python表达式中的字符串是要带引号的:
D:\>python test.py
请输入字符串'xiatiya1234.on,','cahuf','hahahacurrenjiang  q124'
第1个字符串中共有:英文字母9个,数字4个,空格0个,其他字符2个
第2个字符串中共有:英文字母5个,数字0个,空格0个,其他字符0个
第3个字符串中共有:英文字母18个,数字3个,空格2个,其他字符0个

D:\>
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-3-12 17:35:09 | 显示全部楼层
本帖最后由 傻眼貓咪 于 2022-3-12 17:36 编辑

这就是新人很容易弄错的地方,因为超级喜欢用 eval(),是也用 eval() 不是也用 eval()。其实 eval() 真正用途不该这样滥用的。

def count(*strx):
    lenth = len(strx)
    for i in range(lenth):
        Flag_num = 0
        Flag_str = 0
        Flag_space = 0
        Flag_other = 0
        for each in strx[i]:
            if each.isdigit() == True:
                Flag_num += 1
            elif each.isalpha() == True:
                Flag_str += 1
            elif each.isspace() == True:
                Flag_space += 1
            else:
                Flag_other += 1
        print("第%d个字符串中共有:英文字母%d个,数字%d个,空格%d个,其他字符%d个" % (i + 1,Flag_str,Flag_num,Flag_space,Flag_other))

test = input("请输入字符串").split(',') # <-------------- 注意这里
count(*test)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-3-12 17:43:01 | 显示全部楼层
我想应该很多人只会用 eval() 而不知其字意吧...

eval =  evaluates 意思是评估,eval() 方法返回从表达式评估的结果。
input() 本来输入值就是字符串,字符串有很多很多方法,如 split() 就是其中一个很好用的方法,如题要求,用 split() 最好。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2022-3-12 17:56:01 | 显示全部楼层    本楼为最佳答案   
本帖最后由 isdkz 于 2022-3-12 18:01 编辑

def count(*strx):
    lenth = len(strx)
    for i in range(lenth):
        Flag_num = 0
        Flag_str = 0
        Flag_space = 0
        Flag_other = 0
        for each in strx[i]:                       # 这里少了个 i
            if each.isdigit() == True:
                Flag_num += 1
            elif each.isalpha() == True:
                Flag_str += 1
            elif each.isspace() == True:
                Flag_space += 1
            else:
                Flag_other += 1
        print("第%d个字符串中共有:英文字母%d个,数字%d个,空格%d个,其他字符%d个" % (i + 1,Flag_str,Flag_num,Flag_space,Flag_other))

test = eval(input("请输入字符串"))
count(*test)

你用 eval 得输入符合 python语法的表达式,用 split 也可以,

不过 字符串的 split 方法会按给定字符串来分割,比如 .split(','),它会根据所有逗号分割,

也就是无法统计所有逗号,两个相邻的逗号之间还会分割出一个空字符串,

用 eval 的话你得这样输入,在字符串两边加上引号,python表达式中的字符串是要带引号的:
D:\>python test.py
请输入字符串'xiatiya1234.on,','cahuf','hahahacurrenjiang  q124'
第1个字符串中共有:英文字母9个,数字4个,空格0个,其他字符2个
第2个字符串中共有:英文字母5个,数字0个,空格0个,其他字符0个
第3个字符串中共有:英文字母18个,数字3个,空格2个,其他字符0个

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

使用道具 举报

发表于 2022-3-12 18:06:16 | 显示全部楼层
终于看懂了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-3-12 18:33:04 | 显示全部楼层

        问题解决要给人家 "最佳答案"
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-3-12 19:05:48 | 显示全部楼层
傻眼貓咪 发表于 2022-3-12 17:43
我想应该很多人只会用 eval() 而不知其字意吧...

eval =  evaluates 意思是评估,eval() 方法返回从表达 ...

emmmmmm能多举个eval的例子吗 我实在是没搞懂这个eval的用法
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-3-12 19:08:47 | 显示全部楼层
isdkz 发表于 2022-3-12 17:56
你用 eval 得输入符合 python语法的表达式,用 split 也可以,

不过 字符串的 split 方法会按给定字 ...

也就是说 如果我要传入多个列表的话 就要[...],[...]
传入多个元组就要(...),(...)
总之需要体现出它是个什么类型对吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-3-12 19:10:41 | 显示全部楼层
本帖最后由 isdkz 于 2022-3-12 19:13 编辑
Jerry~Mouse 发表于 2022-3-12 19:08
也就是说 如果我要传入多个列表的话 就要[...],[...]
传入多个元组就要(...),(...)
总之需要体现出它 ...


对的,你在 python 代码中是怎么写的,就要怎么输入,

你可以理解成用了 eval,它就会把 eval 的字符串当成 python 代码填进去,

你不加括号python的打包解包机制也会自动打包成元组,所以元组不需要加括号
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2022-3-12 19:19:58 | 显示全部楼层
Jerry~Mouse 发表于 2022-3-12 19:05
emmmmmm能多举个eval的例子吗 我实在是没搞懂这个eval的用法

9 楼大佬解说很详细,可以学习学习
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-3-12 19:24:36 | 显示全部楼层
本帖最后由 傻眼貓咪 于 2022-3-12 19:27 编辑
Jerry~Mouse 发表于 2022-3-12 19:05
emmmmmm能多举个eval的例子吗 我实在是没搞懂这个eval的用法


例子 1:
A = 9999
x = "A"
y = eval(x)
print(y)
9999
例子 2:
def myFunc(a, b):
    return (a + b) * 2

print(eval(input()))
注意这里的输入:
输入:
myFunc(13, 9)
输出:
44
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-3-12 19:54:19 | 显示全部楼层
傻眼貓咪 发表于 2022-3-12 19:24
例子 1:例子 2:注意这里的输入:
输入:输出:

啊~~我似乎理解了 在第二个例子里 输入的myFunc(13,9)如果没有eval的话 就会被当成字符串处理了,但是有eval,就当成了之前定义过的函数处理
第一个例子也是 本来A是个字符串,eval过后 变成了之前定义过的名字A = 9999 了
可以这么理解吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-3-12 20:23:52 | 显示全部楼层
Jerry~Mouse 发表于 2022-3-12 19:54
啊~~我似乎理解了 在第二个例子里 输入的myFunc(13,9)如果没有eval的话 就会被当成字符串处理了,但是有e ...

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

使用道具 举报

 楼主| 发表于 2022-3-12 22:20:03 | 显示全部楼层

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-12 01:40

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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