制作了一个递归程序,将列位置转换为 Excel 列(1 = A,27 = AA),在我的输出中获取 @'s
Made a recursive program to convert the column position into an Excel column (1 = A, 27 = AA), getting @'s in my output
我制作这个程序是为了让自己熟悉递归,并且出于所有意图和目的,它正在运行。
def alpha_covert(to_print):
if to_print is 0:
return 'Z'
else:
return chr(int(to_print) + 64)
def order(to_print):
if to_print <= 26:
return alpha_covert(to_print)
else:
return (str(order(to_print % 26))) + (str(order(to_print / 26)))
一些示例输出:
>>print(order(1))
>>print(order(100))
>>print(order(443))
>>print(order(9001))
>>print(order(9999999999999999))
A
VC
AQ
EHM
O@JIHYHMTURB
最后一个输出为什么有@
?我认为没有问题,因为 int
在我使用 alpha_covert
之前没有声明,到那时应该只是 less than or equal to 26
.
这是某种浮点数舍入错误吗?
我尝试自行解决此问题时的一些额外示例。我不知道这是什么意思:
>>print(order(9999999999999997))
>>print(order(9999999999999998))
>>print(order(9999999999999999))
M@JIHYHMTURB
N@JIHYHMTURB
O@JIHYHMTURB
这里的问题是:
if to_print is 0:
在您将 to_print
转换为整数 之前 发生。另外,你真的应该使用平等(==
)而不是身份(is
);小整数在 CPython 中保留,但这是一个您不应该依赖的实现细节。
最简单的修复方法是:
if to_print == '0': # compare to string, and by equality
但更好的方法是先转换数字,利用零数值evaluate false-y:
def alpha_convert(to_print): # note typo in function name
"""A docstring would be nice, too!"""
to_print = int(to_print)
return chr(to_print + 64) if to_print else 'Z'
我制作这个程序是为了让自己熟悉递归,并且出于所有意图和目的,它正在运行。
def alpha_covert(to_print):
if to_print is 0:
return 'Z'
else:
return chr(int(to_print) + 64)
def order(to_print):
if to_print <= 26:
return alpha_covert(to_print)
else:
return (str(order(to_print % 26))) + (str(order(to_print / 26)))
一些示例输出:
>>print(order(1))
>>print(order(100))
>>print(order(443))
>>print(order(9001))
>>print(order(9999999999999999))
A
VC
AQ
EHM
O@JIHYHMTURB
最后一个输出为什么有@
?我认为没有问题,因为 int
在我使用 alpha_covert
之前没有声明,到那时应该只是 less than or equal to 26
.
这是某种浮点数舍入错误吗?
我尝试自行解决此问题时的一些额外示例。我不知道这是什么意思:
>>print(order(9999999999999997))
>>print(order(9999999999999998))
>>print(order(9999999999999999))
M@JIHYHMTURB
N@JIHYHMTURB
O@JIHYHMTURB
这里的问题是:
if to_print is 0:
在您将 to_print
转换为整数 之前 发生。另外,你真的应该使用平等(==
)而不是身份(is
);小整数在 CPython 中保留,但这是一个您不应该依赖的实现细节。
最简单的修复方法是:
if to_print == '0': # compare to string, and by equality
但更好的方法是先转换数字,利用零数值evaluate false-y:
def alpha_convert(to_print): # note typo in function name
"""A docstring would be nice, too!"""
to_print = int(to_print)
return chr(to_print + 64) if to_print else 'Z'