只接受某些字母组的元组

2024-05-15 05:54:48 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图创建一个函数,该函数只接收只有字母C、B、E、D元素的元组。参数包括CEE、DDBBB、ECDBE或CCB。输入将是一个tup=('CEE','DDBBB','ECDBE','CCCCB'),使用我创建的其他函数将它们转换为表示位置的数字

 def obter_pin(tup):
        pin=()
        posicao=5
        if not 4<=len(tup)<=10 or 'CBED' not in tup:
            raise ValueError('obter pin: argumento invalido')
        else:    
            for ele in tup:
            dig=obter_digito(ele,posicao)
            posicao=dig
            pin+=(dig,)
        return pin

Tags: 函数in元素字母pinnot元组dig
3条回答

尽管我更喜欢@Jab's solution,但我只想添加另一种方式:

invalid = any(s.remove('C').remove('B').remove('E').remove('D') for s in tup)

更好的是:

invalid = any(s.strip('CBED') for s in tup)

或:

if ''.join(tup).strip('CBED'):
...

您可以使用此单行函数

函数定义

def myfunction (t):
  return all(set(e).issubset('CBED') for e in t)

正在使用的功能

tup1 = ('CEE', 'DDBBB', 'ECDBE', 'CCCCB')
tup2 = ('CEE', 'DDBBB', 'ECDBE', 'GOO')
tup3 = ('CEE', 'DDBBB', 'ECDBE', 'ALPHA')

print(myfunction(tup1)) #True
print(myfunction(tup2)) #Fale
print(myfunction(tup3)) #Fale

使用set比较:

>>> allow = {'C', 'B', 'E', 'D'}
>>> tup1 = ('CEE', 'DDBBB', 'ECDBE', 'CCCCB')
>>> tup2 = ('CEE', 'DDBBB', 'ECDBE', 'CCCCBA')
>>> allow >= set().union(*tup1)
True
>>> allow >= set().union(*tup2)
False

相关问题 更多 >

    热门问题