优雅的大蟒蛇——Python

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

2018-02-04  本文已影响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()
上一篇下一篇

猜你喜欢

热点阅读