美文网首页优雅的大蟒蛇——Python
.isdigit()方法引出的整数判断问题

.isdigit()方法引出的整数判断问题

作者: 帕博雷克斯丢丢 | 来源:发表于2018-02-04 15:26 被阅读0次
    在做一个计算平均数的作业时,因为要求使用哨兵循环进行不限次输入,所以需要判断输入是否为整数类型;于是想到了str的digit()方法,代码如下:
    #average2.py
    #利用哨兵循环来进行结束判断
    
    def main():
        sum = 0.0    count = 0
        num = 0
        entry = input("输入一个数字,非数字值结束>>")
        while entry.isdigit():
            num = eval(entry)
            sum += num
            count += 1
            entry = input("输入一个数字,非数字值结束>>")
        if count == 0:
            print("一个数字也没输入,你好棒棒哦!")
        else:
            print("average={}".format(sum / count))
    
    main()
    
    可是在调试过程中发现一旦输入负数就会触发哨兵退出循环,分析原因可能是isdigit()方法在遇到负数的“-”号时判断为非数字类型所致;百度并改进代码:

    判断正负整数方法如下:

    第一种:
    <str>.startswith(str, beg = 0, end = len(string))方法是判断字符串是否以字符串str开头,可选参数beg和end分别为指定起始位置和结束位置。
    num = '-10'
    if (num.startswith('-') and num[1:] or num).isdigit():
        print("num是整数")
    else:
        print("num不是整数")
    
    第二种:
    利用正则表达式
    num = '-10'
    import re
    if re.match(r'^-?(\.\d+|\d+(\.\d+)?)', num):
        print(num是整数)
    else:
        print(num不是整数)
    
    第三种
    num = '-10'
    if num.lstrip('-').isdigit():
        print(num是整数)
    else:
        print(num不是整数)
    

    改进后的代码如下:

    #average2.py
    #利用哨兵循环来进行结束判断
    
    def main():
        sum = 0.0
        count = 0
        num = 0
        entry = input("输入一个数字,非数字值结束>>")
        while (entry.startswith('-') and entry[1:] or entry).isdigit():
            num = eval(entry)
            sum += num
            count += 1
            entry = input("输入一个数字,非数字值结束>>")
        if count == 0:
            print("一个数字也没输入,你好棒棒哦!")
        else:
            print("average={}".format(sum / count))
    
    main()
    

    相关文章

      网友评论

        本文标题:.isdigit()方法引出的整数判断问题

        本文链接:https://www.haomeiwen.com/subject/rfpmzxtx.html