我曾经用同样的目标编写了自己的函数,但现在却令人尴尬地复杂化了。

from math import log, ceil, floor

from collections import deque

from itertools import repeat

from string import uppercase, digits

import re

__alphanumerals = (digits + uppercase)

class InvalidBaseError(ValueError): pass

class FloatConvertError(ValueError): pass

class IncorrectBaseError(ValueError): pass

def getbase(number, base=2, frombase = 10):

if not frombase == 10:

number = getvalue(number, frombase)

#getvalue is also a personal function to replicate int(number, base)

if 1 >= base or base >= len(__alphanumerals) or not floor(base) == base:

raise InvalidBaseError("Invalid value: {} entered as base to convert

to. n{}".format(base,

"Assert that the base to convert to is a decimal integer."))

if isinstance(number, str):

try:

number = atof(number)

except ValueError:

#The first check of whether the base is 10 would have already corrected the number

raise IncorrectBaseError("Incorrect base passed as base of number -> number: {} base: {}".format(number, frombase))

#^ v was supporting float numbers incase number was the return of another operation

if number > floor(number):

raise FloatConvertError("The number to be converted must not be a float. {}".format(number))

isNegative = False

if number < 0:

isNegative = True

number = abs(number)

logarithm = log(number, base) if number else 0 #get around number being zero easily

ceiling = int(logarithm) + 1

structure = deque(repeat(0, ceiling), maxlen = ceiling)

while number:

if number >= (base ** int(logarithm)):

acceptable_digit = int(number / (base ** floor(logarithm)))

structure.append(acceptable_digit if acceptable_digit < 10 else __alphanumerals[acceptable_digit])

number -= acceptable_digit * (base ** floor(logarithm))

else:

structure.append(0)

logarithm -= 1

while structure[0] == 0:

#the result needs trailing zeros

structure.rotate(-1)

return ("-" if isNegative and number else "") + reduce(lambda a, b: a + b, map(lambda a: str(a), structure))

我认为函数strbase应该只支持base> = 2和&lt; = 36以防止与python中的其他工具冲突,例如int。

另外,我认为只应该使用一个字母大小写字母,最好是大写,以防止与其他函数如int冲突,因为它会认为“a”和“A”都是10。

from string import uppercase

dig_to_chr = lambda num: str(num) if num < 10 else uppercase[num - 10]

def strbase(number, base):

if not 2 <= base <= 36:

raise ValueError("Base to convert to must be >= 2 and <= 36")

if number < 0:

return "-" + strbase(-number, base)

d, m = divmod(number, base)

if d:

return strbase(d, base) + dig_to_chr(m)

return dig_to_chr(m)

python取反函数_Python优雅的反函数int(string,base)相关推荐

  1. python取整数_python 取整函数

    向下取整的运算称为Floor,用数学符号⌊⌋表示:向上取整的运算称为Ceiling,用数学符号⌈⌉表示.例如: ⌊59/60⌋=0 ⌈59/60⌉=1 ⌊-59/60⌋=-1 ⌈-59/60⌉=0 向 ...

  2. python 取名字_python 获取如何获取类的名称?

    标准库importlib 内置getattr 内置dir 这几个可以帮助你实现想要的需求,这也是项目当中lazyImport很常见的一种方式. 题主可以自己先根据文档尝试怎么写,有空我再写具体怎么实现 ...

  3. python exchangelib 删除邮件_Python优雅的操作Exchange邮箱——exchangelib模块使用介绍...

    最近想把公司邮箱的附件给下载下来,附件好多都是我整理的报告和文档,一个个去下载明显太傻,碰到这种问题第一个想到的就是Python啦 需求很简单,只需要登录自己的Exchange邮箱,然后遍历所有邮件, ...

  4. python取元素_python 如何提取对象内的元素

    python 菜鸟一枚,手上有 一个对象如下 Message(MessageMediaDocument(document=Document(id=620850100255067285, access_ ...

  5. python报错ValueError: invalid literal for int() with base 10解决方法

    原因:把带有小数的字符串强转为int 解决方法: 如果你非要用int,那就在int中加个float,例如: int(float(xxx)) 如果只是想将提取的字符串转换为数字,那就将int改为floa ...

  6. python字节流分割_Python 字节流,字符串,十六进制相互转换实例(binascii,bytes)

    问题描述 最近做一个项目,是用Python进行相关的串口操作.及将相关指令通过串口发给设备,设备根据发过来的指令来做出相应的操作,所用的库是Pyserial.在最初开发时,出现的问题在于:别人给的文档 ...

  7. python字节流处理_Python 字节流,字符串,十六进制相互转换实例(binascii,bytes)

    问题描述 最近做一个项目,是用Python进行相关的串口操作.及将相关指令通过串口发给设备,设备根据发过来的指令来做出相应的操作,所用的库是Pyserial.在最初开发时,出现的问题在于:别人给的文档 ...

  8. python 优雅退出_Python学习教程:Python 使用 backoff 更优雅的实现轮询

    我们经常在开发中会遇到这样一种场景,即轮循操作.今天介绍一个Python库,用于更方便的达到轮循的效果--backoff. Python学习教程:Python 使用 backoff 更优雅的实现轮询 ...

  9. math python 向上取整_Python成为专业人士笔记-各数学运算操作深度剖析

    "专业人士笔记"系列目录: 创帆云:Python成为专业人士笔记--强烈建议收藏!每日持续更新!​zhuanlan.zhihu.com Python可以执行常见的数学运算符,包括整 ...

最新文章

  1. 浅谈单图像三维重建算法
  2. python自定义分页器()转自https://www.cnblogs.com/yuanchenqi/articles/7652353.html
  3. 深度优先搜索(DFS)相关习题
  4. 第三次作业(词频统计及其效能分析)
  5. flash写保护原理_为什么固态会掉盘?著名的30分钟大法修复是什么原理?
  6. htc816t Android go,HTC D816t(Desire D816t 移动4G)一键刷机图文教程详解
  7. 微软2013年笔试题详解及深入
  8. oracle数据导入/导出
  9. 如何安装win10与linux双系统,Windows10与CentOS 双系统共存完美教程
  10. this与bind(this)
  11. Day12:使用正则表达式
  12. 人脸识别系列(一):dlib安装和使用
  13. Android svc命令
  14. 程序员真的需要一台 Mac 吗?
  15. Java逐行读取文件
  16. mysql left join like_使用LEFT JOIN和LIKE mysql
  17. 项目质量管理中的新老7工具
  18. 【python】windows定时运行python脚本
  19. 触发器实现当一个表中字段改变时同时改变另一个表中字段值
  20. 数理统计学(Mathematic Statistics)的基本概念

热门文章

  1. 刚回到北京,倒时差中……
  2. linux下父子进程共享socket,多进程共享socket(Linux,Win32)
  3. php串行化,PHP串行化与JSON
  4. Java黑皮书课后题第6章:*6.20(计算一个字符串中字母的个数)编写一个方法,使用下面的方法体计算字符串中的字母个数。编写一个测试程序,提示用户输入字符串,然后显示字符串中的字母个数
  5. 视觉编码(Visual Encoding)
  6. 批量插入以及数据存在重复就进行更新操作
  7. 编码:隐匿在计算机软硬件背后的语言(7)--存储器组织
  8. 安装laravel5.1项目命令
  9. Segment fault之痛
  10. php 中文 decode_php json_decode 解析中文