PY_I_P_W14_M16 Wyszukiwanie wzorca w tekście
Wykrywanie mutacji genowej w sekwencjach DNA
Lekarze odkryli sekwencję DNA odpowiedzialną za poważną chorobę genetyczną. Mutacja ta ma postać: AGTCG
W ramach badań genetycznych trzem pacjentom pobrano próbki DNA. Ich sekwencje genowe przedstawiają się następująco:
Pacjent 1:
TTAGTCGATCGTPacjent 2:
GCTTAGGCTAGCPacjent 3:
AGTCGTTAGTCG
Napisz program w języku Python, który:
Wczytuje sekwencję mutacji oraz sekwencje DNA trzech pacjentów.
Sprawdza, czy dana mutacja występuje w sekwencji każdego pacjenta.
Wypisuje, który pacjent ma mutację oraz na której pozycji się ona zaczyna (indeks liczony od zera).
Jeśli pacjent nie ma mutacji — wypisze odpowiednią informację.
Przykład oczekiwanego wyniku:
Pacjent 1: Mutacja wykryta na pozycji 2
Pacjent 2: Mutacji nie wykryto
Pacjent 3: Mutacja wykryta na pozycji 01. Zastanów się, czym jest mutacja w tym zadaniu. Mutacja to konkretny ciąg znaków (AGTCG), który może pojawić się w dłuższej sekwencji DNA.
2. Jak znaleźć wzorzec w tekście? Przesuwaj wzorzec po sekwencji DNA — znak po znaku — i porównuj, czy kolejne litery pasują.
3. Jak to zrobić w programie?
Użyj pętli
for, która przesuwa wzorzec po sekwencji.Wewnątrz tej pętli dodaj drugą pętlę, która porównuje znaki wzorca z fragmentem sekwencji.
Jeśli wszystkie znaki pasują — zapisz pozycję i wypisz wynik.
4. Jak obsłużyć sytuację, gdy mutacji nie ma? Jeśli nie znajdziesz żadnego dopasowania — wypisz komunikat: „Mutacji nie wykryto”.
def znajdz_mutacje(sekwencja, mutacja):
for i in range(len(sekwencja) - len(mutacja) + 1):
pasuje = True
for j in range(len(mutacja)):
if sekwencja[i + j] != mutacja[j]:
pasuje = False
break
if pasuje:
return i # zwróć indeks pierwszego wystąpienia
return -1 # mutacja nie występuje
# Dane
mutacja = "AGTCG"
pacjent1 = "TTAGTCGATCGT"
pacjent2 = "GCTTAGGCTAGC"
pacjent3 = "AGTCGTTAGTCG"
# Sprawdzenie mutacji
poz1 = znajdz_mutacje(pacjent1, mutacja)
poz2 = znajdz_mutacje(pacjent2, mutacja)
poz3 = znajdz_mutacje(pacjent3, mutacja)
# Wyniki
print("Pacjent 1:", end=" ")
if poz1 != -1:
print(f"Mutacja wykryta na pozycji {poz1}")
else:
print("Mutacji nie wykryto")
print("Pacjent 2:", end=" ")
if poz2 != -1:
print(f"Mutacja wykryta na pozycji {poz2}")
else:
print("Mutacji nie wykryto")
print("Pacjent 3:", end=" ")
if poz3 != -1:
print(f"Mutacja wykryta na pozycji {poz3}")
else:
print("Mutacji nie wykryto")
#include <iostream>
#include <string>
using namespace std;
int znajdzMutacje(string sekwencja, string mutacja) {
for (int i = 0; i <= sekwencja.length() - mutacja.length(); i++) {
bool pasuje = true;
for (int j = 0; j < mutacja.length(); j++) {
if (sekwencja[i + j] != mutacja[j]) {
pasuje = false;
break;
}
}
if (pasuje) return i; // Zwróć pozycję pierwszego wystąpienia
}
return -1; // Mutacja nie występuje
}
int main() {
string mutacja = "AGTCG";
string pacjent1 = "TTAGTCGATCGT";
string pacjent2 = "GCTTAGGCTAGC";
string pacjent3 = "AGTCGTTAGTCG";
int poz1 = znajdzMutacje(pacjent1, mutacja);
int poz2 = znajdzMutacje(pacjent2, mutacja);
int poz3 = znajdzMutacje(pacjent3, mutacja);
cout << "Pacjent 1: ";
if (poz1 != -1)
cout << "Mutacja wykryta na pozycji " << poz1 << endl;
else
cout << "Mutacji nie wykryto" << endl;
cout << "Pacjent 2: ";
if (poz2 != -1)
cout << "Mutacja wykryta na pozycji " << poz2 << endl;
else
cout << "Mutacji nie wykryto" << endl;
cout << "Pacjent 3: ";
if (poz3 != -1)
cout << "Mutacja wykryta na pozycji " << poz3 << endl;
else
cout << "Mutacji nie wykryto" << endl;
return 0;
}