由.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()