Jerry~Mouse 发表于 2022-3-12 17:29:38

关于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: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:
            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)

傻眼貓咪 发表于 2022-3-12 17:43:01

我想应该很多人只会用 eval() 而不知其字意吧...

eval =evaluates 意思是评估,eval() 方法返回从表达式评估的结果。
input() 本来输入值就是字符串,字符串有很多很多方法,如 split() 就是其中一个很好用的方法,如题要求,用 split() 最好。

isdkz 发表于 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
            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:16

终于看懂了

jackz007 发表于 2022-3-12 18:33:04

lovesir 发表于 2022-3-12 18:06
终于看懂了

      问题解决要给人家 "最佳答案"

Jerry~Mouse 发表于 2022-3-12 19:05:48

傻眼貓咪 发表于 2022-3-12 17:43
我想应该很多人只会用 eval() 而不知其字意吧...

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

emmmmmm能多举个eval的例子吗 我实在是没搞懂这个eval的用法

Jerry~Mouse 发表于 2022-3-12 19:08:47

isdkz 发表于 2022-3-12 17:56
你用 eval 得输入符合 python语法的表达式,用 split 也可以,

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

也就是说 如果我要传入多个列表的话 就要[...],[...]
传入多个元组就要(...),(...)
总之需要体现出它是个什么类型对吧

isdkz 发表于 2022-3-12 19:10:41

本帖最后由 isdkz 于 2022-3-12 19:13 编辑

Jerry~Mouse 发表于 2022-3-12 19:08
也就是说 如果我要传入多个列表的话 就要[...],[...]
传入多个元组就要(...),(...)
总之需要体现出它 ...

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

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

你不加括号python的打包解包机制也会自动打包成元组,所以元组不需要加括号

傻眼貓咪 发表于 2022-3-12 19:19:58

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

9 楼大佬解说很详细,可以学习学习

傻眼貓咪 发表于 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

Jerry~Mouse 发表于 2022-3-12 19:54:19

傻眼貓咪 发表于 2022-3-12 19:24
例子 1:例子 2:注意这里的输入:
输入:输出:

啊~~我似乎理解了 在第二个例子里 输入的myFunc(13,9)如果没有eval的话 就会被当成字符串处理了,但是有eval,就当成了之前定义过的函数处理
第一个例子也是 本来A是个字符串,eval过后 变成了之前定义过的名字A = 9999 了
可以这么理解吗?

傻眼貓咪 发表于 2022-3-12 20:23:52

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

可以这样理解

Jerry~Mouse 发表于 2022-3-12 22:20:03

傻眼貓咪 发表于 2022-3-12 20:23
可以这样理解

ok 谢谢猫咪~
页: [1]
查看完整版本: 关于input与收集参数 带有逗号的字符串