我有以下辅助函数来计算多个读数列表中的总步数
例如[' 40',' 1571',' 1366',' 691',' 947', ' 1947',' 108',' 132',' 950',' 1884']
def data_check(readings, total):
for reading in readings:
steps = int(reading)
total = total + steps
return total
我需要改变程序,以便它可以处理坏数据,例如字符串或负值,并在发生错误值时将总数加零。
例如[' 40',' 1571',' 13vgs6',' -5',' 947' ]
我的解决方案如下,如果没有正常工作,那么在程序中稍后会出现零错误除法:
def data_check(readings, total):
""" checks to see if data is good format and returns total """
print(readings)
for reading in readings:
if type(reading) == int:
steps = int(reading)
else:
steps = 0
total = total + steps
return total
也许我正在使用一种不好的方法,并且shoudl可能有一个帮助函数,用手前的零替换列表中的所有错误值?
答案 0 :(得分:1)
type
对象的type
有点像它的类;你无法检查字符串是否像这样表示整数。
try
和except
你可以这样做:
try:
value = int(reading)
except: # parsing to integer failed
value = 0
re
正则表达式您还可以import re
并检查re.match(r"\d+$", reading)
的真实性,以确定它是否代表整数。以下正则表达式起作用:
Type | Regex
Positive Integer | \d+$
Integer | -?\d+$
Positive Real | (\d+|\d*\.\d+)$
Real | -?(\d+|\d*\.\d+)$
制作你的代码:
if re.match(r"\d+", reading): # or whichever regex you choose
value = int(reading) # or float(reading)
else:
value = 0
str
函数字符串具有确定它们是否全部为数字的功能。 str.isdigit(string)
适用于正整数,因此您可以执行此操作:
if reading.isdigit():
value = int(reading)
else:
value = 0
也许更热情的是value = int(reading) if reading.isdigit() else 0
或value = reading.isdigit() and int(reading)
;第二个更短但可读性更低。
答案 1 :(得分:0)
从answer开始,您可以查找该字符“ord(char)”的ascii索引,如果它在“48-57”(数字范围)范围内,则追回“chr”(索引)“
答案 2 :(得分:0)
对于整数值的总数,您可以尝试:
import re
s = ['40', '1571', '13vgs6', '-5', '947']
integers = len([i for i in s if re.findall("^-*\d+$", i)])
print(integers)
输出:
4
答案 3 :(得分:-1)
您可以使用&#34; isinstance()&#34;内置功能。</ p>
def numberofints(listofvalues):
integers = 0
for i in listofvalues:
if isinstance(i, int): integers += 1
return integers