2 回答

TA貢獻(xiàn)1846條經(jīng)驗(yàn) 獲得超7個(gè)贊
我不太清楚您期望的輸出是什么,因此假設(shè)您不想要數(shù)字中的奇數(shù)(4567 -> 4468)
您只需通過(guò)以下方式即可:
n = [int(i) for i in input("Enter a number: ")]
caseNum = 0
for i, x in enumerate(n):
if x % 2 != 0:
if x > 5:
n[i] += 1
else:
n[i] -= 1
caseNum += 1
print("".join(str(x) for x in n), "CaseNum: ", caseNum)
如果您已經(jīng)在主程序中使用了 if-else,則您實(shí)際上并不需要 Even 函數(shù)。
對(duì)于您的代碼,如果您使用的是 Even 函數(shù),則需要返回值True或False。
def isEven (n): #function checks if the number is even or odd
if int(n) % 2 == 0:
return True
else:
return False
您正在RecursionError調(diào)用相同的函數(shù)(循環(huán)它)而沒(méi)有任何停止條件。
Edit(b,x,y)
您函數(shù)中的此語(yǔ)句正在創(chuàng)建問(wèn)題,并且在限制之后,python 停止執(zhí)行并給出錯(cuò)誤。
如果你能詳細(xì)說(shuō)明使用caseNum和動(dòng)作,我就可以在程序中添加它們。

TA貢獻(xiàn)1853條經(jīng)驗(yàn) 獲得超6個(gè)贊
即使沒(méi)有無(wú)條件調(diào)用Edit(b,x,y)作為最后一步,您的代碼也正朝著“超出最大遞歸深度”的方向發(fā)展。
問(wèn)題是您正在根據(jù)數(shù)字增加或減少數(shù)字??紤]一個(gè)像3000一個(gè)高階奇數(shù)位的數(shù)字。在 1000 次遞歸調(diào)用中,您需要將它增加或減少近 1000 次。但是默認(rèn)的堆棧深度只有 1000 幀,所以你已經(jīng)沉沒(méi)了。
但情況會(huì)變得更糟??紤]一個(gè)簡(jiǎn)單的數(shù)字,例如10,您的遞減和遞增邏輯會(huì)將其更改為 9,然后變回 10,然后是 9,然后是 10,依此類推。
你最好像@DeepMehta 那樣遞增和遞減單個(gè)數(shù)字,而不是整個(gè)數(shù)字。
要正確控制對(duì) 的遞歸調(diào)用Edit(),請(qǐng)使用您的x和/或y計(jì)數(shù)器來(lái)確定在此調(diào)用期間是否進(jìn)行了任何更改。如果沒(méi)有變化,返回號(hào)碼。如果有變化,遞歸完成工作。
至于isEven()功能,你可以簡(jiǎn)單地做:
def isEven(number):
''' function checks if the number is even or odd '''
return int(number) % 2 == 0
添加回答
舉報(bào)