|
|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
我在做模拟 bin() 函数的联系,之前一个函数我已经成功了,但不够简练,我通过递归的方式想做一个优化。但返回值总是None。经验证,是最后的 return 命令出了问题,请高手解答:
代码如下:
- def Bin(decimal = 0, binary = '', minus_sign = ''):
- ' binary & minus_sign is for function use.'
- mi = minus_sign
- print('1') #这里是验证1
- if decimal > 0:
- dec = decimal // 2
- if decimal % 2 == 1:
- bi = '1' + binary
- else:
- bi = '0' + binary
- Bin(dec, bi, mi)
- elif decimal < 0:
- mi = '-'
- dec = -decimal
- bi = binary
- Bin(dec, bi, mi)
- else:
- if len(binary) == 0:
- bi = '0b0'
- else:
- bi = mi + '0b' + binary
- print('2') #这里是验证2
- print(bi) #这里是验证3
- return bi
- de = Bin(1,'test') #这里将第二个参数,输入内容,作为验证
- print(de) #这里是最终验证
复制代码
以上只是模拟 bin() 函数的部分。Bin(0) 完全可以运行,但输入其他的值就不行了。通过插入验证的语句可知,只是在最后 return 时出了问题。运行结果如下:
- 1
- 1
- 2
- 0b1test
- None
- >>>
- =============== RESTART: /Users/henry/Lin/Python/L17-3 test.py ===============
- 1
- 2
- 0btest
- 0btest
- >>>
复制代码
附上我前一版本的代码,运行完全没有问题,return 的运行机理和这里完全一样:
- def Bin_base(value_base = 0):
- 'value_base > 0'
- if value_base <= 0:
- return False
- else:
- export = value_base //2
- num = value_base % 2
- final_base = str(num)
- return (final_base, export)
-
- def Bin(value = 0):
- '此函数用于模拟bin(),value must be int'
- minus_sign = ''
- Final = ''
- if value < 0:
- minus_sign = '-'
- value = -value
- #取保值为正数,方便计算此处的value还要继续后面的计算
- elif value == 0:
- Final = '0b0'
- return Final
- a = Bin_base(value)
-
- while a[1] != 0:
- Final = a[0] + Final
- a = Bin_base(a[1])
- Final = minus_sign + '0b' + a[0] + Final
- return Final
- #以上为 bin() 的模拟运算过程
- while True:
- #保证输入的为int
- temp = input('请输入一个整数:')
- if temp.isdigit() or temp[0] == '-' and temp[1:].isdigit():
- decimal = int(temp)
- break
- else:
- print('输入有误,', end = '')
- binary = Bin(decimal)
- print(binary)
- #输出求得的二进制数值
- check = bin(decimal)
- if check == binary :
- print('经验证,答案正确')
- else:
- print('答案有误,请检查')
- #验证答案是否正确
复制代码
运行结果如下:
- 请输入一个整数:-900
- -0b1110000100
- 经验证,答案正确
- >>>
复制代码 |
|