msmsms Posted October 24, 2012 at 12:59 PM Report #480251 Posted October 24, 2012 at 12:59 PM (edited) eu fiz assim, mas nao está a dar certo o que estou a errar? def a(c1, c2): if c2 in c1: print 'a cadeia 2 tem algo da cadeia 1' else: print 'a cadeia 2 nao tem nada da cadeia 1' if __name__=='__main__': a('abcd', 'trcd') Edited October 24, 2012 at 06:26 PM by thoga31 GeSHi
KTachyon Posted October 24, 2012 at 01:27 PM Report #480258 Posted October 24, 2012 at 01:27 PM Em principio estás a errar em tudo 🙂 Estás a assumir que o c2 in c1 vai verificar se existem letras de c2 no c1. if set(c2).isdisjoint(c1): print 'a cadeia 2 nao tem nada da cadeia 1' else: print 'a cadeia 2 tem algo da cadeia 1' “There are two ways of constructing a software design: One way is to make it so simple that there are obviously no deficiencies, and the other way is to make it so complicated that there are no obvious deficiencies. The first method is far more difficult.” -- Tony Hoare
msmsms Posted October 24, 2012 at 02:01 PM Author Report #480261 Posted October 24, 2012 at 02:01 PM Em principio estás a errar em tudo 🙂 Estás a assumir que o c2 in c1 vai verificar se existem letras de c2 no c1. if set(c2).isdisjoint(c1): print 'a cadeia 2 nao tem nada da cadeia 1' else: print 'a cadeia 2 tem algo da cadeia 1' eu quero que o computador veja que as duas cadeias têm o cd logo a c1 tem algo da c2, neste caso tem 2 letras. nao entendo a tua solução, o que é isso do isdisjoint?
KTachyon Posted October 24, 2012 at 02:08 PM Report #480263 Posted October 24, 2012 at 02:08 PM Basicamente serve para verificar se um set não tem elementos em comum com o outro (retorna True ou False). Mas isso funciona ao nível de caracteres e sem referência à posição deles em cada um. Ou seja, basta terem 1 char em comum. “There are two ways of constructing a software design: One way is to make it so simple that there are obviously no deficiencies, and the other way is to make it so complicated that there are no obvious deficiencies. The first method is far more difficult.” -- Tony Hoare
thoga31 Posted October 24, 2012 at 06:32 PM Report #480294 Posted October 24, 2012 at 06:32 PM @msmsms, quando queres ver se c2 tem algo de c1, basta ser 1 catacter ou tem de ser, no mínimo, 2 consecutivos? Knowledge is free!
Pedro C. Posted October 24, 2012 at 08:27 PM Report #480319 Posted October 24, 2012 at 08:27 PM Existe um módulo de Python nativo com o qual consegues o que pretendes com alguma facilidade: http://docs.python.org/library/difflib.html#sequencematcher-objects Vê o exemplo abaixo. In [22]: import difflib as d In [23]: a = "abxcd" In [24]: b = "abcd" In [25]: s = d.SequenceMatcher(None, "abxcd", "abcd") In [26]: s.get_matching_blocks() Out[26]: [Match(a=0, b=0, size=2), Match(a=3, b=2, size=2), Match(a=5, b=4, size=0)] In [27]: a[0:0+2] Out[27]: 'ab' In [28]: b[0:0+2] Out[28]: 'ab' In [29]: a[3:3+2] Out[29]: 'cd' In [30]: b[2:2+2] Out[30]: 'cd' Repara que a seguir a fazer os matching blocks chamei os índices que ele indicou. Por exemplo a string a do indice 3 a 3 + size (no exemplo size=2) é igual a b de 2 a 2 +size.
motherFFH Posted October 24, 2012 at 10:13 PM Report #480346 Posted October 24, 2012 at 10:13 PM Outra alternativa minimalista: if c2.translate(None, c1)==c2: print 'a cadeia 2 nao tem nada da cadeia 1' else: print 'a cadeia 2 tem algo da cadeia 1'
thoga31 Posted October 24, 2012 at 10:27 PM Report #480351 Posted October 24, 2012 at 10:27 PM Há tantas formas de definir a função, e todas elas interessantes à sua maneira 🙂 Eis mais uma: def contem(c1, c2): return "a cadeia 2 nao tem nada da cadeia 1" if set(c1) & set(c2) == set() else "a cadeia 2 tem algo da cadeia 1" Knowledge is free!
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now