将元音转换为整数并将整数转换为元音

时间:2020-06-15 13:13:06

标签: python-3.x

我正在完成两项任务,Hello, playground <nil> malformed HTTP version "HTTP/2" 7 <nil> HTTP/2 &{301 301 HTTP/2.0 2 0 map[Cache-Control:[public, max-age=2592000] Content-Length:[220] Content-Type:[text/html; charset=UTF-8] Date:[Mon, 15 Jun 2020 11:08:39 GMT] Expires:[Wed, 15 Jul 2020 11:08:39 GMT] Location:[https://www.google.com/] Server:[gws]] 0xc0000902c0 220 [] false false map[] 0xc0000f2000 <nil>} <nil> encodedecode用于将字符串中的所有元音转换为相应的数字(请参见代码中的词典),encode用于将字符串中的所有整数转换回其相应的元音。

到目前为止,我的代码:

decode

我已经设法完成第一个功能vowels = {'a': '1', 'e': '2', 'i': '3', 'o': '4', 'u': '5'} def encode(word1): new_word = "" for letter in word1: if letter.lower() not in vowels: new_word += letter else: new_word += letter.replace(letter, vowels[letter]) return new_word print(encode('hello')) def decode(word2): new_word1 = "" for letter in word2: if letter.lower()not in vowels: new_word1 += letter elif letter.isdigit(): new_word1 += letter.replace(letter, vowels[letter]) return new_word1 print(encode('h2ll4')) ---------------------------------------------- >>> h2ll4 >>> h2ll4 ,但是不能完全正确地完成第二个功能。我试图让encode返回key的{​​{1}},但是我可以让value返回encode的{​​{1}}吗?

我的问题:

  • 我能否像value一样获得字典key来返回decode 可以返回value吗?
  • 如何检查字符串中的整数(1 到5)然后返回元音?
  • 此外,采用什么方法 最Pythonic的方式做到这一点?我的key函数可以更短吗?

您可以假定字符串中唯一出现的整数是1到5。

谢谢

1 个答案:

答案 0 :(得分:1)

一种更简洁的方法是使用列表推导,检查word中的每个字符是否在vowels中,如果是,则将其替换为相应的整数。可以使用逆字典以相同的方式进行解码:

vowels = {'a': '1',
          'e': '2',
          'i': '3',
          'o': '4',
          'u': '5'}

inv_vowels = { i : v for v, i in vowels.items() }

def encode(word):
    return ''.join(vowels[c] if c in vowels else c for c in word)

def decode(word):
    return ''.join(inv_vowels[c] if c in inv_vowels else c for c in word)

print(encode('hello'))

print(decode(encode('hello')))

输出:

h2ll4
hello

如果您想在word中使用大写字母,则可以将列表理解中的c替换为c.lower(),即

def encode(word):
    return ''.join(vowels[c.lower()] if c.lower() in vowels else c for c in word)

但是请注意,在解码时,编码的元音将始终转换为小写字符,即

print(decode(encode('HEllo')))

给予

Hello   # not HEllo

您可以通过以下方法解决此问题:扩展字典以包含大写的元音,而不更改输入字母的大小写,例如

vowels = {'a': '1',
          'e': '2',
          'i': '3',
          'o': '4',
          'u': '5',
          'A': '6',
          'E': '7',
          'I': '8',
          'O': '9',
          'U': '0'}

inv_vowels = { i : v for v, i in vowels.items() }

def encode(word):
    return ''.join(vowels[c] if c in vowels else c for c in word)

def decode(word):
    return ''.join(inv_vowels[c] if c in inv_vowels else c for c in word)

print(encode('HEllo'))

print(decode(encode('HEllo')))

输出:

H7ll4
HEllo
相关问题