2017-11-02 1 views
-1

문자를 입력 받아 알파벳과 이전 문자를 모두 반환하는 함수를 만들려고합니다. 예를 들어 매개 변수가 "c"이면 반환 값은 c, b, 이것은 내가 아스키로 뭘하려하지만 난 당신이 generator로 재귀를 사용할 수있는이아스키를 사용한 파이썬 재귀

def backwards_alphabet(n): 
    if ord(n) == 97: 
    return n 
    else: 
    return n + backwards_alphabet(ord(n-1)) 
+2

당신은 재귀 호출의 입력을'ord'하고있다. 함수가 문자를 기대하는 것처럼 보이지만,'ord' 결과를 전달하면 재귀 적으로'int'를 전달한다는 것을 의미합니다. 어쨌든, "붙박이"가 아니라 [MCVE]를 제공해야합니다. – ShadowRanger

답변

1

에 붙어 :

def backwards_alphabet(n): 
    if ord(n) == 97: 
     yield "a" 
    else: 
     yield n 
     for i in backwards_alphabet(chr(ord(n)-1)): 
      for b in i: 
       yield i 

print(list(backwards_alphabet("f"))) 

출력 :

['f', 'e', 'd', 'c', 'b', 'a'] 
+0

왜 downvote? – Ajax1234

+0

아마도이 downbote는이 모든 것들을 이해할 수없는 누군가로부터 온 것입니다 ... –

2

ord으로 전화 할 때주의해야합니다. string을 전달하면 int이 전달됩니다. 단순히 감소 된 ascii 값을 문자열로 다시 변환 한 다음 함수에 전달합니다 (backwards_alphabet(chr(ord(n)-1))).

전체 코드 : 내 문제는 내 문제를 해결 ord에 도움을

def backwards_alphabet(n): 
    if ord(n) == 97: 
    return n 
    else: 
    return n + backwards_alphabet(chr(ord(n)-1)) 

res = backwards_alphabet('c') 

print(res) 

출력 cba

0

감사했다, 나는이 같은 그것을 찾고 있었어요 :

def backwards_alphabet(letter): 
    if ord(letter) == 97: 
    return letter 
    else: 
    print(letter) 
    return backwards_alphabet(chr(ord(letter)-1)) 

print(backwards_alphabet('c')) 
+1

제안 된 솔루션은 "알파벳과 모든 이전 문자로 문자를 반환합니다"라고 당신이 말한 것을하지 않습니다. *** 하나의 문자''a "'를 반환하고 나머지는 부작용으로 인쇄합니다. 뒤로 알파벳을 반환하는 적절한 재귀 함수를 원한다면 @ Anonta의 대답 (+1) – cdlane