Python:数字不正常的字母

时间:2017-02-07 03:23:03

标签: python string function return

所以我有这个项目用于学校,我已经接近完成了它,但有一个我似乎无法正常工作。我的一个功能是:

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')

它返回346448而不是它应该做的3464408(根据我的任务)。现在我知道函数根据代码给出了正确的答案,但我错过了什么让它包括8之前的0?

编辑:

函数应该采用你传递的字符串(音调)并将其分解成2个字母的块(元音/辅音对)。使用该对,它应该使用该对并用元音/辅音索引它们并返回一个数字。 >>> alphapinDecode(' hi')返回27因为辅音[h]给出idx = 5而元音[i]给出idx2 = 2

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

你的方法可能很尴尬 - 我会一次迭代两个字符:

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)

好的,现在我们的代码看起来好一些,我们可以看到,我希望,对于第二个文本中的co对,值为1*5 + 3,等于{{1}当然,但你真的想要8。有很多方法可以做到这一点,但由于你是初学者,我将说明最简单的方法。

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