2017-02-07 5 views
0

私はこのプロジェクトを学校にしています。私はそれを終えるのにとても近いですが、ちょうどうまく動作しないようなものがあります。私が持っている機能の一つは、次のとおりです。ほとんどの部分についてPython:正しく動作しない数字への手紙

vowels = "aeiou" 
consonants = "bcdfghjklmnpqrstvwyz" 

def alphapinDecode(tone): 
    s = tone.lower() 
    pin = '' 

    for ch in s: 
     if ch in consonants: 
      idx = consonants.find(ch) 
     elif ch in vowels: 
      idx2 = vowels.find(ch) 

      pin = str(pin) + str(idx*5 + idx2) 




    print(pin) 

    return None 

機能は、私はそれがしたい正確にどのように実行されます。私は文字列を取り、文字列として数値を返します。例えば

>>> alphapinDecode('bomelela') 
3464140 

しかし、私は、このいずれかの操作を実行したとき:

>>>> alphapinDecode('bomeluco') 

を、(私の割り当てに従って)行うことになっているように、それは3464408の代わりに346448を返します。今私は関数が私にコードに基づいて正しい答えを与えている知っているが、私はそれが8の前に0を含めるために逃しているのですか?

EDIT:

機能は、指定した文字列(トーン)に乗り、2つの文字のチャンク(母音/子音ペア)にそれを破ることになっています。ペアでは、ペアを使用し、それらに母音/子音を添えて番号を返すことになっています。子音[H]を与えるので>>> alphapinDecode( 'HI')は、27を返しIDX = 5母音[i]が与えながらIDX2 = 2

+3

以下のようにしてみてください、そしてどのようにしてください。 – DyZ

+0

申し訳ありません私はやったと思っていましたが、あなたが渡した文字列(音色)を2つの文字チャンク(母音/子音のペア)に分割することになっていました。ペアでは、ペアを使用し、それらに母音/子音を添えて番号を返すことになっています。 >>> alphapinDecode( 'hi') は、子音[h]がidx = 5を与えるため、母音[i]がidx2 = 2を与えるため、27を返します。 – user2951723

+0

質問を更新して、 – DyZ

答えて

0

あなたのアプローチは、おそらく厄介である - 私は、一度に2つの文字を繰り返すことになる。

def alphapinDecode(tone): 
    s = tone.lower() 
    pin = '' 

    # Step over the string two characters at a time 
    for i in range(0, len(s), 2): 
     ch1 = s[i] 
     ch2 = s[i+1] 
     if ch1 in consonants and ch2 in vowels: 
      idx1 = consonants.find(ch1) 
      idx2 = vowels.find(ch2) 
      this_pair = idx1*5 + idx2 
      # For debugging 
      print(this_pair) 
      pin = pin + str(this_pair) 

    # We need to print without leading zeroes 
    print(int(pin)) 

    # Returning the pin as an integer is better, IMO 
    return int(pin) 

OK、今はコードが少し良く見てきた、私たちが見ることができる、私はもちろん、8に等しい、あなたの2番目のテキストでcoペアのために、値が1*5 + 3であることを、願っていますが、あなたは本当にしたいです08。これを行うにはいくつかの方法がありますが、あなたが初心者なので、最も簡単な方法を説明します。

this_pair = idx1*5 + idx2 
if this_pair < 10: 
    # If the pair is less than ten, prepend a leading zero 
    this_pair_pin = '0' + str(this_pair) 
else 
    this_pair_pin = str(this_pair) 
pin = pin + this_pair_pin 

EDIT:我々は、コードを簡略化することができますよう、文字列で答えを蓄積忘れるましょう:

pin = 0 
#... 
     this_pair = idx1*5 + idx2 
     pin = pin * 100 + this_pair 

print(pin) 
+0

これは3の前に0を追加しますか?03464408 – user2951723

+0

@ user2951723ああ、あなたが正しいです、私は削除したコメントに間違っていました... –

1

私はあなたの講義は、適応性をコーディング学生をテストしようとしていると思います。 本当にそのようないくつかの出力を達成したい場合は、あなたの関数が行うことになっている正確に何を説明した場合、それが役立つだろう

vowels = "aeiou" 
consonants = "bcdfghjklmnpqrstvwyz" 

def alphapinDecode(tone): 
    s = tone.lower() 
    pin = '' 

for ch in s: 
    if ch in consonants: 
     idx = consonants.find(ch) 
    elif ch in vowels: 
     idx2 = vowels.find(ch) 

     num = '%02d' % int((idx*5) + idx2) #python 2 
     num = "{0:0=2d}".format((idx*5) + idx2) #python 3 more verbose 
     pin = pin + str(num) 

    print(int(pin)) 

    return None 

alphapinDecode('bomeluco') # 3464408 

alphapinDecode('bomelela') # 3464140 
+0

'%02d'%とは何ですか? – user2951723

+0

@ user2951732 ** '%02d' **は、最小幅2のフィールドに整数dをフォーマットします。左にゼロパディング(先頭)があります。** 2番目の '%' **演算子は[string左側に文字列を使用すると、[formatting](https://docs.python.org/3/library/stdtypes.html#string-formatting)演算子が使用されます。 – Tyler

関連する問題