本周的编程任务,第一题要求大家写一个函数myInt(string),传入的string是一个字符串,返回转化后的int数值。例如传入的是“123”,函数执行后返回123。你很快就想到了用系统函数int()进行处理,但这不是这道编程题目的本意,出这道题,是想让大家实现和int()相同的功能。系统函数int()看起来是那么的简单,但我们自己实现时就会发现,有许多情况需要考虑并处理。
解决问题的第一步,是确定问题的范围,性质。
1、int类型的数值是有正负之分的,因此,如果传入的是“-321”,函数返回的应该是321。
2、传入的字符串,也可能看起来是float类型的,比如“32.56”,那么函数应该返回32。
3、如果传入的字符串是“00032”呢,程序是应该报错呢还是返回32呢?我认为应该返回32,毕竟字符串里的内容都是数值。
4、但如果传入“34k5”就应该果断报错,可如果传入的是“34.k8”,我认为返回34就可以了。
5、再比如传入的是“.87”,函数应该返回0。
以上,是我对字符串转int问题的分析和定义。到此,我希望大家能明白我的用意,代码只是实现目标的方式和手段,在动手写代码前,首先要明确目标,上面分析的过程才是重点,你可以不同意我的分析,对这个问题有自己的理解和定义,没有关系,但你一定要先分析,想清楚各种输入情况以及所对应的输出结果,当你把这些事情想清楚后,其实程序已经在你脑海里了。
下面,我给出我的代码
#coding=utf-8classformatErr(Exception):
pass
defmyInt(string):
factor = 10result = 0negative = Falseifstring[0] == '-':
string = string[1:]
negative = Trueforitem instring:
if notitem.isdigit():
ifitem == ".":
break
else:
raiseformatErr(u'格式错误')
else:
result = result*factor + int(item)
ifnegative:
result = -1*result
returnresult
if__name__ == '__main__':
printmyInt('123')
printmyInt('-123')
printmyInt('3123.t98')
printmyInt('-0223.98')
printmyInt('.98')
printmyInt('-012-3.98')
在函数中,我首先判断string[0]是否“-”,因为这决定了最终的结果是正还是负。如果存在负号,就要使用切片的方法截掉最前面的负号。
接下来,遍历字符串,如果item不是数字,那么就需要判断是否为小数点,遇到小数点就可以退出了,因为我们想要的是整数,如果既不是数字也不是小数点,就一定是格式有错误,我这里向上抛出一个异常。
真正有趣的地方是如何计算最终的结果
result = result*factor + int(item)
这样一条简单的语句,就在循环的过程中不断的进行计算,并得到了最终的结果。最终,我还是用到了int()函数,其实也可以不用,你能想到什么办法不用么?
函数里,我使用了异常,如果你不理解,可以忽略掉这部分,只关注你能看得懂的地方。如果你感兴趣,可以在百度里搜索关键字“python 自定义异常类”,你可以顺势学习有关异常的知识。
临渊羡鱼,不如退而结网,行动起来,再伟大的想法也是由一件件具体的事情构成的,心里不要总想着写一段程序做什么了不起的事情,你连这么简单的函数都无法独立完成,还怎么上天去和太阳肩并肩。