首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何用Python3修复base62编码的代码?

如何用Python3修复base62编码的代码?
EN

Stack Overflow用户
提问于 2019-10-08 05:31:22
回答 1查看 231关注 0票数 0

我正在为base62编码创建一个python脚本。然而,由于某些原因,我的代码没有产生正确的答案。正确答案是LpuPe81bc2w,但我得到的是LpuPe81bc0w。如果你可以检查我的代码,看看我是否可以做任何不同的事情。请让我知道。我不能使用pybase62。

我真的想知道为什么我的代码不能工作,因为我想了解基础知识。最好是

没有PyBASE62,我还是个初学者。

代码语言:javascript
复制
base_62 = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"
BASE = len(base_62)

def to_base_62(number):  
 rete=''
 while number != 0:    
  rete = (base_62[number%BASE])+rete  
  number = int(number/BASE)
 return rete

print (to_base_62(18327995462734721974))
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-10-08 05:42:37

您遇到了浮点精度的冲突。我在你的代码中插入了一个简单的跟踪语句:

代码语言:javascript
复制
def to_base_62(number):  
    rete=''
    while number != 0: 
        rete = base_62[number%BASE]+rete    
        print(len(rete), number/BASE)
        number = int(number/BASE)
    return rete

输出:

代码语言:javascript
复制
1 2.956128300441084e+17
2 4767948871679168.0
3 76902401156115.61
4 1240361308969.5967
5 20005827564.01613
6 322674638.12903225
7 5204429.645161291
8 83942.40322580645
9 1353.9032258064517
10 21.822580645161292
11 0.3387096774193548
LpuPe81bc0w

浮点除法没有保留足够的位数来区分这么大的数字所需的位数。相反,请使用整数除法:

代码语言:javascript
复制
while number != 0: 
    rete = base_62[number%BASE]+rete    
    print(len(rete), number // BASE)
    number = number // BASE

输出:

代码语言:javascript
复制
1 295612830044108418
2 4767948871679168
3 76902401156115
4 1240361308969
5 20005827564
6 322674638
7 5204429
8 83942
9 1353
10 21
11 0
LpuPe81bc2w
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58277400

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档