我被要求撰寫一個函式,如果正整數中有偶數個 0 位,則回傳 True,否則回傳 False(使用遞回)。作為嘗試,我撰寫了一個函式來計算整數中 0 的個數。我可以知道如何修改程式以使其回傳 True 和 False 嗎?
def valid(n):
number = str(n)
position = number.find("0")
if "0" not in number:
return 0
return 1 valid(number[(position 1):])
print(valid(12340006))
uj5u.com熱心網友回復:
我們可以注意到
- 【遞回基數】單零無效,其他單數有效
- [遞回步驟] 當我們看到非零數字時,什么都不應該改變(檢查剩余部分應該給出相同的結果)。當我們看到零時,我們應該反轉結果(如果之前是奇數,現在是偶數,反之亦然)。
def is_valid(num):
n, r = divmod(num, 10)
if n == 0:
return r != 0
return (not is_valid(n) if r == 0 else is_valid(n))
uj5u.com熱心網友回復:
def valid(n):
number = str(n)
position = number.find("0")
if "0" not in number:
return 0
return 1 valid(number[(position 1):])
print("True" if valid(12340006)%2 ==0 else "False")
uj5u.com熱心網友回復:
我相信問題是0從if "0" not in number條件回傳。你可以這樣試試:
def valid(n):
zeros = str(n).count("0")
if zeros == 0:
return False
else:
return zeros % 2 == 0
哪個應該作業。
uj5u.com熱心網友回復:
您有一個數字,不要轉換為字串,而是使用divmod并除以 10:
def valid(num, count=0):
num, r = divmod(num, 10) # extract the last digit (r)
if num == 0: # we exhausted the number
return count%2==0 # is there an even number of zeros?
else:
return valid(num, count=count int(r==0))
處理 0 -> False:
def valid(num, count=None):
if count is None:
count = int(num==0)
num, r = divmod(num, 10)
if num == 0:
return count%2==0
else:
return valid(num, count=count int(r==0))
例子:
>>> valid(12340006)
False
>>> valid(10203)
True
>>> valid(0)
False
uj5u.com熱心網友回復:
如果使用 將數字轉換為字串str,則不必使用遞回實作自己的回圈。您可以'0'使用 計算字串中的數量str.count,然后使用 測驗該數字是奇數還是偶數%。
def is_valid(n):
s = str(n)
nb_of_zeroes = s.count('0')
return (nb_of_zeroes % 2 == 0)
如果您想自己實作邏輯,而不是使用strand count,那么您可以回圈 with 的數字n以divmod(n, 10)提取n(個位)和n//10(沒有其個位的數字)。例如,divmod(9836, 10)是(983, 6)。
def is_valid(n):
if n == 0:
return False # special case for 0 which is a bit different from other numbers
else:
nb_of_zeroes = 0
while n >= 10:
n,u = divmod(n, 10)
if u == 0:
nb_of_zeroes = 1
return (nb_of_zeroes % 2 == 0)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/426866.html
上一篇:在DAX中計算Adstock:如何添加上面單元格的值?
下一篇:這個函式如何處理2個串列?
