正式练习的第一个Python功能:加法计算

        我本身有着C/C++的功底,最近开始自学python,包括网上找教程,买书看。不确定我这种有其他编程语言经验的再学新的语言算不算零基础,总之书就买的《零基础学Python程序设计》。鉴于自己之前已经看过一段时间,这个程序也就不能真的当自己是新手一样写了。各种花里胡哨的操作也是要尝试着加进去的。

        今天做的是书上的一个习题:加法计算题。接收用户输入的两个数,对这两个数进行相加运算,并输出计算结果。

        先看题目,意思很简单就是接收两个数字并输出,主要就是input和print的使用。然后还需要注意几个问题:

1.在python3中input接收的输入类型是string类的,不是真数字。如果只是单纯的相加,会变成字符串的拼接。像这样:

##输入两个数,返回两数相加结果
str1 = input("请输入第一个数:")
str2 = input("请输入第二个数:")
print(str1, "+", str2, "=", str1+str2)

得到结果:

2.如果误输入了不是数字的字串,应该有检查和重输机制。

这就需要将输入的字串检查以及类型转换。

一、

先是第一版的code:

##输入两个数,返回两数相加结果
str1=input("请输入第一个数:")
while(str1.isdigit()==False):
    str1 = input("输入有误,请重新输入数字:")

str2=input("请输入第二个数:")
while(str2.isdigit()==False):
    str2 = input("输入有误,请重新输入数字:")

print("%s + %s = "%(str1, str2), eval(str1)+eval(str2))

先是报错机制,这种简单的函数就不谈异常抛出机制了,我想让他检测到错误时能重来而不是报错退出,就是用了循环机制,这里如果在c里面可以用do-while()实现,但Python没有这个用法。

然后是检查输入的方法,先到网上搜了一下Python怎么判断是数字的,然后找到了几个函数

str = raw_input("please input the number:")

if str.isdigit():

为True表示输入的所有字符都是数字,否则,不是全部为数字

str为字符串
str.isalnum() 所有字符都是数字或者字母
str.isalpha() 所有字符都是字母
str.isdigit() 所有字符都是数字
str.islower() 所有字符都是小写
str.isupper() 所有字符都是大写
str.istitle() 所有单词都是首字母大写,像标题
str.isspace() 所有字符都是空白字符、\t、\n、\r

于是就有了以上第一版的code,然后整型数可以输入了,非正常输入可以检查并重新输入了。

二、

以上是初步的实现,测试过程引发了一个问题,string.isdigit()这个函数不认小数点的,于是输入小数也成了误输入了。现在要求输入可以是整数,小数,不能带与数字无关的字符。于是再从输入的类型检查方面入手看看怎么改。

##输入两个数,返回两数相加结果

def input_num():
    num = input('请输入一个数 : ')
    while True:
        if num.replace('.', '', 1).isdigit():
            return eval(num)
        num = input("输入有误,请重新输入数字:")

        
num1=input_num()
num2=input_num()
print(num1, "+", num2, "=", num1+num2)

从网上找到大神留下的方法稍微修改了下,顺便膜拜一下大神对于replace这个函数的精巧用法。小数可以接收了。

 三、

以上的code也还不能处理负数以及科学计数法表示的数,这个怎么搞哦~

目前的code处理乱码时能检测出来要求重新输入,但eval(string)会报错,然后退出:

而eval函数能处理所有数值。怎样将他们支持的功能合并起来。最终的问题变为怎么判断一个字符串是否为有效表达式,并且不报错退出。

2022.12.13更新:

学到异常处理后再来看这里先用eval("ghjk")在命令行测试一下属于NameError,然后修改上面的code:

 

##输入两个数,返回两数相加结果
 
def input_num():
    num = input('请输入一个数 : ')
    while True:
        try:
            return eval(num)
        except NameError:
            num = input("输入有误,请重新输入数字:")
 
        
num1=input_num()
num2=input_num()
print(num1, "+", num2, "=", num1+num2)

这样输入乱码会报错要求重新输入,特殊表示法表示的数字也能识别了。

最后:今天被打击了,问同组的另一个小伙伴学python要多久,他说这还要学吗,不是看看就会吗。。。。。。。。

  • 5
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值