我的代碼有以下問題,它是一個遞回函式,它的作用是通過元素周期表中化學元素的符號列印一個單詞,如 H、He、Li、Be、B、C 等。例如單詞“silver”列印為“SiLvEr”,使用上面提到的符號,但在我的程式中存在一個問題,因為有一個,兩個或三個字母的化學元素符號,然后程式創建為首先用一個字母檢查,然后用兩個字母檢查,最后用三個字母檢查,但是如果程式用一個字母檢查并且如果元素存在,那么它將不再用2和3個字母檢查,這就是程式
def spell_elements(palabra:str , lista:list):
if palabra == "":
return ""
if palabra[0].capitalize() in lista:
return palabra[0].capitalize() spell_elements(palabra.strip(palabra[0]), Elementos)
if palabra[:2].capitalize() in lista:
return palabra[:2].capitalize() spell_elements(palabra.strip(palabra[:2]), Elementos)
if palabra[:3].capitalize() in lista:
return palabra[:3].capitalize() spell_elements(palabra.strip(palabra[:3]), Elementos)
else:
return ""
En este caso para el ejemlo de silver tenemos:
Elementos = ['H','He','Li','Be','B','C','N','O','F','Ne','Na','Mg','Al','Si','P','S','Cl','Ar','K','Ca',
'Sc','Ti','V','Cr','Mn','Fe','Co','Ni','Cu','Zn','Ga','Ge','As','Se','Br','Kr','Rb','Sr',
'Y','Zr','Nb','Mo','Tc','Ru','Rh','Pd','Ag','Cd','In','Sn','Sb','Te','I','Xe','Cs','Ba','La',
'Ce','Pr','Nd','Pm','Sm','Eu','Gd','Tb','Dy','Ho','Er','Tm','Yb','Lu','Hf','Ta','W','Re','Os','Ir',
'Pt','Au','Hg','Tl','Pb','Bi','Po','At','Rn','Fr','Ra','Ac','Th','Pa','U','Np','Pu','Am','Cm',
'Bk','Cf','Es','Fm','Md','No','Lr','Rf','Db','Sg','Bh','Hs','Mt','Ds','Rg','Cn','Uut','Fl','Uup','Lv',
'Uus','Uuo']
print(spell_elements('arsenic', Elementos)
# Output -> Ars
因此,在這種情況下,它首先在串列 Elements 中找到元素“Ar”,第二個元素將其視為“S”,但后來它不再輸入兩個字符,如果它在串列中則為“Se”的“元素”,然后我想看看我的函式是否有某種方法,盡管元素串列中有一個元素但不會導致我們找到任何東西,請檢查其他兩個條件“如果”,因為它可能是一些他們導致解決方案。
它一定是這樣的
print(spell_elements('arsenic', Elementos)
# Output -> ArSeNIC
uj5u.com熱心網友回復:
您必須檢查第一部分的所有大小,并且只有在遞回可以找到解決方案時才回傳結果:
def spell_elements(S,symbols):
for size in (1,2,3): # try each size
prefix = S[:size].capitalize() # get prefix
if prefix not in symbols: continue # not in symbols
if len(S)==size: return prefix # single symbol
suffix = spell_elements(S[size:],symbols) # solution for rest
if suffix: return prefix suffix # return full solution
print(spell_elements('arsenic',Elementos)) # ArSeNIC
請注意,如果您按降序檢查尺寸(將回傳ArSeNiC),這可能會更好
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/417791.html
標籤:
下一篇:將遞回轉化為迭代
