python - 需要帮助的后续元音检查器
问题描述
我发现很难让函数接受一个值,如果参数包含两个相邻的元音,则返回 True,否则返回 False。
这是我到目前为止所拥有的:
def insert_sv_present(ch):
lvowel = ['a' , 'e' , 'i','o' , 'u']
uvowel = ['A', 'E' , 'I' , 'O', 'U']
if(ch in lvowel) or (ch in uvowel):
return True
else:
return False
解决方案
假设ch
是一个字符串而不是一个字符,你的检查只有在它的大小是1
......你需要实际循环字符串以找到两个连续的字符时才有效。
由于问题要求两个连续的元音,我们可以使用itertools
配方循环字符串pairwise
:
import itertools
def pairwise(iterable):
"s -> (s0,s1), (s1,s2), (s2, s3), ..."
a, b = itertools.tee(iterable)
next(b, None)
return zip(a, b)
def insert_sv_present(s):
lvowel = ['a', 'e', 'i', 'o', 'u']
for pair in pairwise(s):
if pair[0].lower() in lvowel and pair[1].lower() in lvowel:
return True
return False
然后可以通过使用内置all()
函数进行一些澄清和概括:
def insert_sv_present(s):
lvowel = ['a', 'e', 'i', 'o', 'u']
for pair in pairwise(s):
if all(ch.lower() in lvowel for ch in pair):
return True
return False
甚至可以使用内置any()
函数进一步减少,但该步骤可能会违反可读性:
def insert_sv_present(s):
lvowel = ['a', 'e', 'i', 'o', 'u']
return any(all(ch.lower() in lvowel for ch in pair) for pair in pairwise(s))
推荐阅读
- flutter - Flutter 中 onGenerateRoute 和路由的区别
- haskell - `evaluate`、`rwhnf` 和 `seq` 与它们的“深度”对应物有什么区别?
- flutter - 如何在 Flutter 中更新 pubspec.yaml 文件中的单个包
- mysql - SQL:我的查询中出现错误 1064,我找不到原因
- php - 重新验证响应未提交
- apache-spark - Spark 中的 CachedBatch 是什么?
- ios - 如何在我的控制器中快速添加过渡动画?
- android - 进度条 setProgress 在 UI 线程上不起作用
- javascript - 在材料表单元格角度切换此元素
- java - 无法使用带有 Apache 2.4 FOP 的 Spring boot 2.1.6.RELEASE 编译应用程序