关于input与收集参数 带有逗号的字符串
本帖最后由 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:
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,hahahacurrenjiangq124
但是却是错误的SyntaxError: invalid syntax
这个要怎么做到一次性传入多个收集参数呢?(这里我想传入两个参数 三个逗号中只有最后一个是用来分隔两个参数的)
请问怎么解决呢 本帖最后由 傻眼貓咪 于 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:
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) 我想应该很多人只会用 eval() 而不知其字意吧...
eval =evaluates 意思是评估,eval() 方法返回从表达式评估的结果。
input() 本来输入值就是字符串,字符串有很多很多方法,如 split() 就是其中一个很好用的方法,如题要求,用 split() 最好。 本帖最后由 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
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','hahahacurrenjiangq124'
第1个字符串中共有:英文字母9个,数字4个,空格0个,其他字符2个
第2个字符串中共有:英文字母5个,数字0个,空格0个,其他字符0个
第3个字符串中共有:英文字母18个,数字3个,空格2个,其他字符0个
D:\> 终于看懂了 lovesir 发表于 2022-3-12 18:06
终于看懂了
问题解决要给人家 "最佳答案" 傻眼貓咪 发表于 2022-3-12 17:43
我想应该很多人只会用 eval() 而不知其字意吧...
eval =evaluates 意思是评估,eval() 方法返回从表达 ...
emmmmmm能多举个eval的例子吗 我实在是没搞懂这个eval的用法 isdkz 发表于 2022-3-12 17:56
你用 eval 得输入符合 python语法的表达式,用 split 也可以,
不过 字符串的 split 方法会按给定字 ...
也就是说 如果我要传入多个列表的话 就要[...],[...]
传入多个元组就要(...),(...)
总之需要体现出它是个什么类型对吧 本帖最后由 isdkz 于 2022-3-12 19:13 编辑
Jerry~Mouse 发表于 2022-3-12 19:08
也就是说 如果我要传入多个列表的话 就要[...],[...]
传入多个元组就要(...),(...)
总之需要体现出它 ...
对的,你在 python 代码中是怎么写的,就要怎么输入,
你可以理解成用了 eval,它就会把 eval 的字符串当成 python 代码填进去,
你不加括号python的打包解包机制也会自动打包成元组,所以元组不需要加括号 Jerry~Mouse 发表于 2022-3-12 19:05
emmmmmm能多举个eval的例子吗 我实在是没搞懂这个eval的用法
9 楼大佬解说很详细,可以学习学习 本帖最后由 傻眼貓咪 于 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 傻眼貓咪 发表于 2022-3-12 19:24
例子 1:例子 2:注意这里的输入:
输入:输出:
啊~~我似乎理解了 在第二个例子里 输入的myFunc(13,9)如果没有eval的话 就会被当成字符串处理了,但是有eval,就当成了之前定义过的函数处理
第一个例子也是 本来A是个字符串,eval过后 变成了之前定义过的名字A = 9999 了
可以这么理解吗? Jerry~Mouse 发表于 2022-3-12 19:54
啊~~我似乎理解了 在第二个例子里 输入的myFunc(13,9)如果没有eval的话 就会被当成字符串处理了,但是有e ...
可以这样理解 傻眼貓咪 发表于 2022-3-12 20:23
可以这样理解
ok 谢谢猫咪~
页:
[1]