簡體   English   中英

制作了一個遞歸程序,將列位置轉換為Excel列(1 = A,27 = AA),在輸出中得到@

[英]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

對於最后的輸出,為什么會有@ 我以為沒有問題,因為直到我使用alpha_covert聲明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轉換為整數之前發生。 另外,您實際上應該使用等於( == )而不是identity( is ); 小整數會在CPython中進行實習,但這是您不應該依賴的實現細節。

最簡單的解決方法是:

if to_print == '0':  # compare to string, and by equality

但是更好的方法是先轉換數字,並使用零數值評估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'

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM