2012-10-20 15 views
12
def contains_sequence(dna1, dna2): 
    ''' (str, str) -> bool 

    Return True if and only if DNA sequence dna2 occurs in the DNA sequence 
    dna1. 

    >>> contains_sequence('ATCGGC', 'GG') 
    True 
    >>> contains_sequence('ATCGGC', 'GT') 
    False 

    ''' 
    b=False 
    len2=len(dna2) 
    i=0 
    for j in dna1: 
     temp=dna1[i:i+len2] 
     if temp == dna2: 
      b=True 
     i=i+1 
    return b 

Jestem nowy w Pythonie. Program wklejony powyżej daje mi błąd "Niespójne użycie zakładek i spacji w wcięciach" w wierszu "jeśli temp == dna2:" w szczególności. Czy ktoś może mi pomóc w znalezieniu sposobu, w jaki wcięcie jest nieprawidłowe?Niespójne użycie kart i spacji w wcięciach

+2

W powyższym kodzie nie widzimy spacji , karta inaczej. Możesz opublikować wyjście 'cat -evt ', które pokaże spację, tabulatory osobno. – Rohan

Odpowiedz

19

Oznacza to, że w wcięciu zostały pomieszane spacje i tabulatory. Musisz to naprawić, aby zachować zgodność z kartami lub spacji.

+0

Ktoś wie, jak szybko naprawić z vimem? – jb1

+0

@ jb1 Wyszukiwanie "vim convert tabs spaces" dałoby ci [to pytanie] (https://stackoverflow.com/q/426963/216074). – poke

+0

Prawdopodobnie znaleźliśmy go w tym samym czasie, dziękuję: ^) – jb1

1

Zakładając, że masz "dobre" IDE, najlepiej ustawić klawisz tabulacji, aby utworzyć 4 spacje zamiast "tabulatora", w ten sposób masz mniej problemów, i to jest dobra praktyka, bo kiedy będziesz pracować z innymi ludzie.

+0

+1 tylko 4 pomieszczenia powinny być użyte –

4

Jeśli przyjrzeć się dokładnie na linii

temp=dna1[i:i+len2] 
    if temp == dna2: 

w kodzie, widać, że „przestrzeń” na początku każdej linii jest „zbudowany” inaczej. W jednym przypadku używa kart i innych przestrzeni, lub jeśli oba mają tabulatory i spacje, są one używane w różnych kombinacjach.

Możesz to sprawdzić, umieszczając kursor na początku każdego wiersza i używając klawisza ze strzałką w prawo, aby "przejść" przez znaki. Zobaczysz, że kursor porusza się inaczej w każdej linii.

Aby naprawić, usuń tabulatory i spacje na początku każdej linii i ponownie wstaw je z tymi samymi znakami w każdym wierszu.

Aby uniknąć w przyszłości, naucz się korzystać tylko z klawisza tabulatora LUB klawisza spacji, aby wstawić wcięcie i rozważ ustawienie edytora, aby automatycznie konwertował tabulatory na spacje.

+0

dzięki milionowi. komunikat o błędzie mnie zabijał. odpowiedź ur pomogła :) pobłogosław was. – urwaCFC

0

Według swoimi strunami Doc

kod:

b=False 
len2=len(dna2) 
i=0 
for j in dna1: 
    temp=dna1[i:i+len2] 
    if temp == dna2: 
     b=True 
    i=i+1 
return b 

Tyle Big kod można uprościć do jednej linii

return dna1.find(dna2)>=0 

Także jeśli u nie są dobre z wgłębieniami w Edytor "vim" jest dobry do ćwiczenia w IDLE3

Powiązane problemy