如何编写仅接收元素由C、B、E、D组成的元组的Python函数
代码存在的问题
合法性校验逻辑错误
你写的'CBED' not in tup是判断字符串"CBED"是否作为独立元素存在于输入元组中,和你要求的「元组内所有元素的每个字符都仅由C、B、E、D四个字母构成」的需求完全不符。虽然你用or的逻辑是对的(长度不合法或元素不合法就抛错),但第二个判断条件的语义完全错误。
缩进语法错误
for ele in tup: 下方的三行代码没有缩进,不符合Python的缩进语法规则,运行时会直接抛出IndentationError。
自定义函数依赖未明确
代码中调用的obter_digito是你自定义的函数,需要确保该函数在obter_pin调用前已经完成定义,否则会抛出NameError。
修正后的参考代码
# 请先完善你自己的obter_digito函数逻辑,此处仅为占位示例 def obter_digito(ele, pos): # 替换为你自己的转换逻辑 return pos % 4 def obter_pin(tup): pin = () posicao = 5 # 修正后的校验逻辑:长度在4-10之间,且所有元素的所有字符都属于允许集合 if not (4 <= len(tup) <= 10) or any(not all(c in {'C','B','E','D'} for c in ele) for ele in tup): raise ValueError('obter pin: argumento invalido') for ele in tup: dig = obter_digito(ele, posicao) posicao = dig pin += (dig,) return pin
内容的提问来源于stack exchange,提问作者user17243912
相关产品推荐
相关产品推荐

