2017-11-02 15 views
-1

文字を入力してアルファベットの文字とすべての前の文字を返す関数を作成しようとしています。たとえば、パラメータが "c"の場合はc、次にbの場合はa、これは私がASCIIと試みたものですが、私はあなたがgeneratorで再帰を使用することができ、このascyを使ったPython再帰

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

おそらく、ダウンボートは、このすべてのことを理解できない人からのものでした... –

2

ordに電話するときは注意が必要です。 stringとすれば、それはintです。デクリメントされたascii値を文字列に変換してから関数に渡すだけです。

全コード:助けを

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

おかげで、私の問題は、私は私の問題を解決しordしていました、私はこのようにそれを行うために探していた。

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

あなたの提案した解決策は、あなたが必要と言ったことをしません。 "アルファベットと以前のすべての手紙で手紙を返します。 ***の1文字を返し、 '' a''を返し、残りを副作用として出力します。後方のアルファベットを返す適切な再帰関数が必要な場合は、@ Anontaの答え(+1)を参照してください。 – cdlane