在本練習中,您將對字串的值求和。完成遞回函式
def sumString(st):此函式接受一個字串作為引數,并對 ASCII 值為偶數的每個字符的 ASCII 值求和。
我知道如何對所有值求和,但偶數部分具有挑戰性。
def sumString(st):
if not st:
return 0
else:
return ord(st[0] sumString(st[1:])]
我嘗試了一些東西,但此時我很困惑。
def sumString(st):
if not st:
return 0
t=[ord(st[0]),sumString(st[1:])]
for item in t:
if item%2==0:
return item t
uj5u.com熱心網友回復:
也許是這樣的?
def sumString(st):
if not st:
return 0
else:
out = ord(st[0]) if ord(st[0]) % 2 == 0 else 0
return out sumString(st[1:])
print(sumString("abcd"))
輸出:
198
b 的 ASCII 值是 98,d 的 ASCII 值是 100。所以 100 98 給出了輸出。
uj5u.com熱心網友回復:
在發布導致錯誤的代碼時,請確保
TypeError: unsupported operand type(s) for : 'int' and 'list' 在這種情況下包含該錯誤。
無意冒犯,但是您撰寫的代碼是一團糟。您使用第一個字符的順序創建一個串列,然后是函式的輸出。
我想你然后嘗試檢查兩個值是否是偶數(不需要),然后回傳總和(你不這樣做,因為 return 陳述句在回圈內)。
為此,您只需要檢查字串的第一個值,然后將其余的交給同一個函式
def sumString(st):
if not st:
return 0
out = sumString(st[1:]) # get output of the rest of the string
if ord(st[0]) % 2 == 0: # check if first char in str is even
out = ord(st[0])
return out
uj5u.com熱心網友回復:
這里有一個方法遞回和非:
def recursive_sum_even_ascii(s):
if s:
first, *other = s
value = 0
if not ord(first) % 2:
value = ord(first)
return value recursive_sum_even_ascii(other)
return 0
def sum_even_ascii(s):
return sum(ord(char) for char in s if not ord(char) % 2)
# test
s = "23"
out_rec = recursive_sum_even_ascii(s)
out = sum_even_ascii(s)
print(out_rec == out)
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/520630.html
下一篇:嵌套字典到嵌套串列(復選框)
