我正在尝试压缩我的代码(与朋友进行最少行数和字符挑战),但我遇到了问题。
outputWord = ""
def translate(inp):
output = []
words = inp.split()
for i in range(len(words)):
outputWord = ""
curWord = words[i]
if curWord[0] in ("a", "o", "e", "u"):
outputWord = curWord + "way"
else:
pos = curWord.rfind("a") # this is the problem.
outputword = curWord[pos:] + curWord[:pos] + "ay"
output.append(outputWord)
return(output)
output = translate(raw_input(""))
print(' '.join(output))
这是我的代码。
当我定义问题时,我试图找到第一个元音字符(不包括 y)。但我无法想出一种方法以尽可能少的行数来完成它。基本上,它搜索所有元音,并将最小值设置为 pos。这就是我想要做的,但我尝试过的所有内容都占用了 10 多行。
我尝试过使用 if 语句、for 循环、列表、变量和 rfind()。没有一个得到理想的结果。
StackOverflow 现有的所有问题都是为了搜索
一个
字符,而不是五个,并检查哪个字符的索引最小。
请不要这样做对我来说,只需给我有帮助的想法或资源即可。这是一个独立的挑战,我们可以使用 StackOverflow。
可以使用正则表达式来查找第一个元音的位置:
import re
def translate(inp):
output = []
for word in inp.split():
match = re.search("[aeiou]", word)
pos = match.start() if match else -1
output.append(word + "way" if pos == 0 else word[pos:] + word[:pos] + "ay")
return output
output = translate(input())
print(' '.join(output))
这段代码的作用如下:
-
导入
re
模块 :这使得可以使用正则表达式。 -
在循环中使用
re.search()
:对于每个单词,它会搜索第一个匹配[aeiou]
(任何元音)的位置。如果找到匹配,match.start()
会给出该位置的索引;否则,match
将为None
,我们将其设置为-1
。 -
根据
pos
的值构建 pig latin 单词 :如果pos
为 0(第一个字母是元音),则添加 "way"。否则,将从第一个元音开始的单词部分移到开头,并添加 "ay"。
此代码使用列表推导和条件表达式,使代码更短。
标签:python,indexing From: 78786524