Python 检查输入是否为数字或句点
我正在尝试使用逗号分隔的用户输入,并根据输入的数据创建一个列表。例如,用户输入Python 检查输入是否为数字或句点,python,Python,我正在尝试使用逗号分隔的用户输入,并根据输入的数据创建一个列表。例如,用户输入1,2,3,4,5.6,7,我建立一个列表[1,2,3,4,5.6,7]。我还想确保不会有任何字母,但允许空格、单点和数字。例如,如果用户输入1,2,3,4.4.3,a,则应返回一个空白的[]列表 到目前为止,我已经创造了 def is_numeric(s): if s == : print("True") else: print("False") def main()
1,2,3,4,5.6,7
,我建立一个列表[1,2,3,4,5.6,7]
。我还想确保不会有任何字母,但允许空格、单点和数字。例如,如果用户输入1,2,3,4.4.3,a
,则应返回一个空白的[]
列表
到目前为止,我已经创造了
def is_numeric(s):
if s == :
print("True")
else:
print("False")
def main():
s = input("Enter a set of numbers (integers or floats) separated by comman:")
is_numeric(s)
main()
我一直在思考如何检查输入的数字是否符合这些要求
谢谢你的帮助
顺便说一句,这是我从一位老师那里收到的一道题,他在测验前给我出练习题,但我不明白,他会在测验的同一天复习这些题,这对我来说实在太晚了,我学不懂。这不是分数。实现这一点的简单方法是逐个字符遍历字符串。但若你们是老师建议的在点上分裂,我想他想要像这样的伪代码:
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!
在交互式解释器中测试一些表达式是值得的,以了解它们的作用。在代码中间添加一些<代码>打印< /COD>语句,以显示中间值,如果您不确定它们是什么。例如,如果您不知道输入到
的内容是数字的,请将其打印出来。如果您想知道.split('',1)
对不同字符串返回什么,请尝试:'1.2.3'.split('',1),'1.2'.split('',1),'1'.split('',1)
。以此类推。执行此操作的简单方法是逐个字符遍历字符串。但若你们是老师建议的在点上分裂,我想他想要像这样的伪代码:
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!
在交互式解释器中测试一些表达式是值得的,以了解它们的作用。在代码中间添加一些<代码>打印< /COD>语句,以显示中间值,如果您不确定它们是什么。例如,如果您不知道输入到的内容是数字的,请将其打印出来。如果您想知道.split('',1)
对不同字符串返回什么,请尝试:'1.2.3'.split('',1),'1.2'.split('',1),'1'.split('',1)
。等等。我会用正则表达式解决这个问题
# make sure the input is valid (probably a better way than sub)
if input == ':)' or re.sub('^[\d\.,]+$', ':)', input) != ':)':
return []
# get all the comma separated values and convert it to an array of floats
return [float(num) for num in re.findall('([\d\.]+),?', input)]
我会用正则表达式解决这个问题
# make sure the input is valid (probably a better way than sub)
if input == ':)' or re.sub('^[\d\.,]+$', ':)', input) != ':)':
return []
# get all the comma separated values and convert it to an array of floats
return [float(num) for num in re.findall('([\d\.]+),?', input)]
首先,我要规范化输入,这样我就知道会发生什么。空格比逗号更容易处理,所以用空格分隔所有内容
inpt.replace(',', ' ')
现在输入类似于'2 3 4.5 6'
,每个要解析的值之间有一些非零的空格<代码>拆分
可以很好地处理这个问题
inlist = inpt.split()
现在我们有了一个清单,我们只需要知道我们是否需要扔掉它
if all([is_numeric(i) for i in inlist]):
return [int(i, 10) if i.isdigit() else float(i) for i in inlist]
else:
return []
那么,什么是数字?它是一个函数,给定一个元素,确定它是int
还是float
。如果不是那种,我们就扔了。mgilson提出了类似的建议
def is_numeric(i):
try:
float(i)
return True
except ValueError:
pass
return False
这很好,但是如果你不想尝试/除外,你仍然可以使用第二个参数来分割你老师建议的
def is_numeric(i):
parts = i.split('.', 1)
if len(parts) == 2:
characteristic, mantissa = parts # I really just wanted an excuse to use these terms
if '.' in mantissa:
return False
return True
elif i.isdigit():
return True
return False
首先,我要规范化输入,这样我就知道会发生什么。空格比逗号更容易处理,所以用空格分隔所有内容
inpt.replace(',', ' ')
现在输入类似于'2 3 4.5 6'
,每个要解析的值之间有一些非零的空格<代码>拆分
可以很好地处理这个问题
inlist = inpt.split()
现在我们有了一个清单,我们只需要知道我们是否需要扔掉它
if all([is_numeric(i) for i in inlist]):
return [int(i, 10) if i.isdigit() else float(i) for i in inlist]
else:
return []
那么,什么是数字?它是一个函数,给定一个元素,确定它是int
还是float
。如果不是那种,我们就扔了。mgilson提出了类似的建议
def is_numeric(i):
try:
float(i)
return True
except ValueError:
pass
return False
这很好,但是如果你不想尝试/除外,你仍然可以使用第二个参数来分割你老师建议的
def is_numeric(i):
parts = i.split('.', 1)
if len(parts) == 2:
characteristic, mantissa = parts # I really just wanted an excuse to use these terms
if '.' in mantissa:
return False
return True
elif i.isdigit():
return True
return False
你知道除了之外的和吗?在这里,我将
尝试
将字符串转换为浮点
,然后在失败时处理错误。不幸的是,我还没有学习try或except…:(我的老师暗示说,对于多点,可以使用split()方法,ex 4.5。6@mgilson:但是float
在空格或单点上不起作用。这就是我在想的…使用ascii.digits和ascii.lowercase在这个问题上有什么好处吗?@user2840144提示:str.split
需要多少个参数?你知道try
和除了
之外吗?这里我将uldtry
将字符串转换为float
,然后在失败时处理错误。不幸的是,我还没有学习try或except…:(我的老师提示,对于多点,可以使用split()方法,例如4.5。6@mgilson:但是float
不起作用