龙空技术网

python之锻炼程序员思维严密性:判断一个变量是不是数字?

皛心 176

前言:

现时你们对“python判断小数”可能比较关注,姐妹们都需要学习一些“python判断小数”的相关内容。那么小编在网摘上搜集了一些关于“python判断小数””的相关文章,希望咱们能喜欢,看官们快快来了解一下吧!

最近写项目加学前端,python的知识点更新有点少了,抱歉。

这里更新一篇小文章,仅仅是个小练习,考验学python的朋友思维严密性。

题目:

判断一个变量是不是数字?

str_list1 = [1234, '134', '134.151', '-134','一二三', '正三四五', '负四五六', '正三点一四一五']str_list2 = ['-', '--13', '34..421', '.134']
题目要求:

类似str_list1内部元素的变量都判为数字,类似str_list2内部元素的变量都判为非数字!

代码答案:

看答案之前最好尝试自己写一下,写完了再和我写的对比一下:

def isnumber(str_number):  # 判断字符串是不是数字    if type(str_number) is int or type(str_number) is float:  # 如果参数是数字型或浮点型,返回True        return True    if type(str_number) != str or len(str_number) < 1:  # 如果参数不是字符串型或长度小于1,返回False        return False    symbol1 = ('+', '-', '正', '负')  # 正负号    symbol2 = ('.', '点')  # 小数点    if str_number[0] in symbol1:  # 如果首字符是符号,那么整个字符串去除符号        str_number = str_number[1:]        if len(str_number) < 1:  # 如果去除符号后长度为0,判断不是数字            return False    elif str_number[0] in symbol2:  # 首字符不能为小数点        return False    number = ('0', '1', '2', '3', '4', '5', '6', '7', '8', '9',              '零', '一', '二', '三', '四', '五', '六', '七', '八', '九')  # 匹配模板    result = True  # 预设结果是True    point_times = 0  # 小数点次数    str_len = len(str_number)  # 计算整个字符串长度    for i in range(str_len):   # 遍历整个字符串        if str_number[i] in symbol2:  # 如果当前字符是小数点            point_times += 1  # 小数点次数+1            if point_times > 1:  # 小数点出现次数多于1个                result = False  # 判断字符串不是数字                break        elif str_number[i] not in number:  # 如果当前字符不在模板内            result = False  # 判断字符串不是数字            break    return resultstr_list1 = [1234, '134', '134.151', '-134', '一二三', '正三四五', '负四五六', '正三点一四一五']str_list2 = ['-', '--13', '34..421', '.134']for i in str_list1:    print(f"当前参数{i}{'是数字!' if isnumber(i) else '不是数字!'}")print('-'*50)for i in str_list2:    ret = '是数字!' if isnumber(i) else '不是数字!'    print(f"当前参数{i}{'是数字!' if isnumber(i) else '不是数字!'}")out:当前参数1234是数字!当前参数134是数字!当前参数134.151是数字!当前参数-134是数字!当前参数一二三是数字!当前参数正三四五是数字!当前参数负四五六是数字!当前参数正三点一四一五是数字!--------------------------------------------------当前参数-不是数字!当前参数--13不是数字!当前参数34..421不是数字!当前参数.134不是数字!
总结:

从一个简单的小需求分析,判断各种情况,锻炼思维严密性。

考虑问题细致全面,如果有没考虑到的情况那么就会导致结果不符合预期。请看案例中针对参数是int型和float型直接返回True;参数不是str或长度小于1直接返回False;参数只有一个符号无数字直接返回False;参数首字符是小数点的返回False。写程序的时候一定要注意考虑扩展性,不能把内容写死,请注意看元组number、symbol1和symbol2的写法。假设我们需要对中文“壹、贰、叁、 肆、伍、陆、柒、捌、 玖、零、拾、佰、仟、万、 亿、兆”进行判断时,可以扩充number列表。可以使用元组的场合优先用元组,请仔细看number、symbol1和symbol2,虽然它们也可以被定义为列表,但由于它们内部元素在程序运行时不需要修改,所以定义为元组是最佳选择。使用元组比列表更省内存,访问速度也略微快一些。请认真看元组symbol1、symbol2和number定义的位置,在一系列判断条件以后才写,这样可以略微提高程序运行速度,变量在需要的时候才定义。能放在循环外面做的事情一定要放在循环外面做,请注意str_len = len(str_number) 这条语句不写,放在下面for i in range(1, len(str_number)):。这样会影响循环的效率。

标签: #python判断小数