合法数字根据其输入有几种分类:正数、负数、整数、小数
首先按照字符从前往后遍历顺序,最先遇到符号位,所以我们率先完成对于正/负的判断
通过字符串首位,即符号位来区分正数/负数,如果首位不为‘+’or'-'号,默认为正数
#验证输入合法性,e为输入的字符串,数据类型string
def is_legal(e):
if e[0] != '+' or e[0] != '-':#无符号位,默认为正数
num = e[0:]
#补充代码
elif e[0] == '+' or e[0] == '-':#有符号位,对去掉符号位的num 进行检验
num = e[1:]#对e截断,去掉符号位
#补充代码
else:
return False
完成对输入字符正负号的检验后,再对去掉符号位的num进行整数/小数的判断
def is_legal(e):
#区分正数和负数
if e[0] != '+' or e[0] != '-':#无符号位,默认为正数
num = e[0:]
#接下来区分num 是小数还是整数
if num.isdigt():#若输入字符全为数字,即验证num是否为整数
#补充代码
if num.count('.')==1:#输入字符包含一个数量的小数点
#补充代码
elif e[0] == '+' or e[0] == '-':#有符号位,对去掉符号位的num 进行检验
num = e[1:]
# 接下来区分num 是小数还是整数
if num.isdigt(): # 若输入字符全为数字,即验证num是否为整数
#补充代码
if num.count('.') == 1: # 输入字符包含一个数量的小数点
#补充代码
else:
return False # 输入不合法
else:
return False
num整数时:需要去掉字符长度大于1且以0 开头的非法数字
def is_legal(e):
#区分正数和负数
if e[0] != '+' or e[0] != '-':#无符号位,默认为正数
num = e[0:]
#接下来区分num 是小数还是整数
if num.isdigt():#若输入字符全为数字,即验证num是否为整数
#排除以0开头长度大于1的不合法数字
if len(num)>1 and num[0] == 0:
return False
else:
return True
if num.count('.')==1:#输入字符包含一个数量的小数点
#补充代码
elif e[0] == '+' or e[0] == '-':#有符号位,对去掉符号位的num 进行检验
num = e[1:]
# 接下来区分num 是小数还是整数
if num.isdigt(): # 若输入字符全为数字,即验证num是否为整数
# 排除以0开头长度大于1的不合法数字
if len(num) > 1 and num[0] == 0:
return False
else:
return True
if num.count('.') == 1: # 输入字符包含一个数量的小数点
#补充代码
else:
return False # 输入不合法
else:
return False
num小数时:需要以‘.’split num为小数点左边的整数部分left和小数点右边的小数部分right,并用isdigit()检验两部分是否全为数字输入,完整代码如下:
def is_legal(e):
#区分正数和负数
if e[0] != '+' or e[0] != '-':#无符号位,默认为正数
num = e[0:]
#接下来区分num 是小数还是整数
if num.isdigt():#若输入字符全为数字,即验证num是否为整数
#排除以0开头长度大于1的不合法数字
if len(num)>1 and num[0] == 0:
return False
else:
return True
if num.count('.')==1:#输入字符包含一个数量的小数点
left,right = num.split('.')[0],num.split('.')[1]
if left.isdigit() and right.isditgit():
return True
else:
return False
else:
return False#输入不合法
elif e[0] == '+' or e[0] == '-':#有符号位,对去掉符号位的num 进行检验
num = e[1:]
# 接下来区分num 是小数还是整数
if num.isdigt(): # 若输入字符全为数字,即验证num是否为整数
# 排除以0开头长度大于1的不合法数字
if len(num) > 1 and num[0] == 0:
return False
else:
return True
if num.count('.') == 1: # 输入字符包含一个数量的小数点
left, right = num.split('.')[0], num.split('.')[1]
if left.isdigit() and right.isditgit():
return True
else:
return False
else:
return False # 输入不合法
else:
return False