003_014 Python 简单加法器

代码如下:

#encoding=utf-8

print '中国'

#用Python实现加法器
import decimal, re, operator  
parse_input = re.compile(r'''(?x)           # 允许RE中的注释和空白符  
                    (\d+\.?\d*)             # 带有可选的小数部分的数  
                    \s*                     # 可选的空白符  
                    ([-+/*])                # 运算符  
                    $''')                   # 字符串结束  
oper = { '+': operator.add, '-': operator.sub,  
               '*': operator.mul, '/': operator.truediv,  
           }  
total = decimal.Decimal('0')  
def print_total( ):  
      print '=======  =\n', total  
      
print """Welcome to Adding Machine:   
Enter a number and operator,   
an empty line to see the current subtotal,  
or q to quit: """  
while True:  
      try:  
            tape_line = raw_input( ).strip( )  
      except EOFError:  
            tape_line = 'q' 
      if not tape_line:  
            print_total( )  
            continue  
      elif tape_line == 'q':  
            print_total( )  
            break  
      try:  
            num_text, op = parse_input.match(tape_line).groups( )  
      except AttributeError:  
            print 'Invalid entry: %r' % tape_line  
            print 'Enter number and operator,empty line for total, q to quit'  
            continue  
      total = oper[op](total, decimal.Decimal(num_text)) 

感觉不能用,打印结果如下:

中国
Welcome to Adding Machine:   
Enter a number and operator,   
an empty line to see the current subtotal,  
or q to quit: 
1.2-2.3
Invalid entry: '1.2-2.3'
Enter number and operator,empty line for total, q to quit

Python是一种广泛使用的编程语言,支持丰富的数据类型和运算符,其中包括二进制运算。二进制是一种二进制数系统,只包含两个数字0和1,它是计算机中常用的一种数据存储方式。对于二进制数字的加法运算,我们可以借助数学上的加法原理来实现。 二进制加法规则如下: 0 + 0 = 0 0 + 1 = 1 1 + 0 = 1 1 + 1 = 10 从这个规则可以看出,当两个二进制位的值均为1时,它们相加时会产生一个进位,这就是我们需要考虑的主要问题。 下面是一个简单Python二进制加法器的实现: ``` def binary_addition(a, b): # 将二进制数字符串转换为列表,并将前导零补齐 a = list(a.zfill(len(b))) b = list(b.zfill(len(a))) # 设置进位标志 carry = 0 # 存储结果的列表 result = [] # 从右到左遍历二进制串 for i in range(len(a) - 1, -1, -1): # 将当前两个二进制位和进位相加 s = int(a[i]) + int(b[i]) + carry # 如果和大于1,则需要产生进位 if s > 1: carry = 1 s %= 2 else: carry = 0 # 将当前位的结果存储到结果列表中 result.append(str(s)) # 如果最后还有进位,则在结果列表中添加一个'1' if carry == 1: result.append('1') # 将结果列表反转并转换为字符串 result.reverse() return ''.join(result) ``` 该函数接收两个二进制数字符串a和b作为输入,并返回它们的和。在实现中,将两个二进制数字符串转换为列表,并将它们的长度补齐以保证它们的位数相同。然后,从右到左遍历二进制数字串,并逐位执行加法操作(包括进位)。最后,将结果列表反转并转换为字符串即可得到最终的二进制加法结果。 该函数的时间复杂度为O(n),其中n为两个二进制数字串的长度。在实际应用中,我们可以将该函数封装为一个类,以便于重复使用。此外,还可以添加多种错误处理机制和优化方案来提高代码的健壮性和性能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

书山登峰人

精品不易

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值