2 回答

TA貢獻1846條經驗 獲得超7個贊
我不太清楚您期望的輸出是什么,因此假設您不想要數字中的奇數(4567 -> 4468)
您只需通過以下方式即可:
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)
如果您已經在主程序中使用了 if-else,則您實際上并不需要 Even 函數。
對于您的代碼,如果您使用的是 Even 函數,則需要返回值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調用相同的函數(循環它)而沒有任何停止條件。
Edit(b,x,y)
您函數中的此語句正在創建問題,并且在限制之后,python 停止執行并給出錯誤。
如果你能詳細說明使用caseNum和動作,我就可以在程序中添加它們。

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