执行此操作的简单方法是逐个字符地遍历字符串。但是如果你是老师建议分割点,我认为他想要这样的伪代码:
def is_numeric(s):
remove whitespace before and after the string
split on the first '.'
if and only if all of the split-out parts are all digits, return True
如果您知道strip
、split
、all
和isdigit
函数,那么在 Python 中这应该比在伪代码中更短、更易读。如果您不了解所有内容,内置函数和字符串方法的文档应该会填补空白。
现在,要查看整个输入是否有效,您需要用逗号分隔并检查每个部分,因此:
parts = s.split(',')
if not all(is_numeric(part) for part in parts):
result = []
else:
result = [float(part) for part in parts]
如果这些理解超出了您的知识范围,您可以更详细地编写相同的内容:
parts = s.split(',')
result = []
for part in parts:
if not is_numeric(part):
result = []
break
else:
result.append(float(part))
这是整个事情:
def is_numeric(s):
s = s.strip()
parts = s.split('.', 1)
return all(part.isdigit() for part in parts)
def parse_input(line):
parts = line.split(',')
if not all(is_numeric(part) for part in parts):
return []
else:
return [float(part) for part in parts]
while True:
line = input("You will provide numbers. Provide! Provide! ")
if not line:
break
values = parse_input(line)
print("Reporting provided numbers:", values)
这是一个成绩单:
You will provide numbers. Provide! Provide! 1,2,3,4,5.6,7
Reporting provided numbers: [1.0, 2.0, 3.0, 4.0, 5.6, 7.0]
You will provide numbers. Provide! Provide! 1,2,3,4.4.3,a
Reporting provided numbers: []
You will provide numbers. Provide! Provide! 1, 2, 3, 4
Reporting provided numbers: [1.0, 2.0, 3.0, 4.0]
You will provide numbers. Provide! Provide! 1.2, 3.4.5
Reporting provided numbers: []
You will provide numbers. Provide! Provide!
值得测试交互式解释器中的一些表达式,看看它们做了什么。print
如果您不确定它们是什么,请在代码中间添加一些语句以显示中间值。例如,如果你不知道吃什么is_numeric
,那就吃吧print(s)
。如果您想知道.split('.', 1)
不同字符串的返回值,请尝试:'1.2.3'.split('.', 1), '1.2'.split('.', 1), '1'.split('.', 1)
. 等等。