def print_crispr_target(gene_sequence, gRNA, pam, gRNA_position): # Długości sekwencji gRNA i PAM gRNA_length = len(gRNA) pam_length = len(pam) # Zbuduj schemat tekstowy dna_display = list(gene_sequence) gRNA_end = gRNA_position + gRNA_length pam_start = gRNA_end pam_end = pam_start + pam_length # Upewnij się, że PAM mieści się w sekwencji DNA if pam_end > len(gene_sequence): print("Error: PAM nie mieści się w sekwencji DNA. Sprawdź pozycję gRNA i długość sekwencji.") return # Oznaczenie gRNA w konsoli for i in range(gRNA_position, gRNA_end): dna_display[i] = dna_display[i].lower() # Zaznacz gRNA (małe litery) # Oznaczenie PAM w konsoli for i in range(pam_start, pam_end): dna_display[i] = dna_display[i].upper() # Zaznacz PAM (wielkie litery) # Utwórz linię z końcami 5' i 3' sequence_line = ''.join(dna_display) # Generuj znaczniki dla orientacji gRNA i PAM marker_line = ' ' * gRNA_position + '^' * gRNA_length + ' ' * (pam_start - gRNA_end) + 'PAM' # Wyświetl wyniki print("Sense Strand (5' to 3'):") print(f"5' {sequence_line} 3'") print(f" {marker_line}") print("\nComplementary Strand (3' to 5'):") complement = gene_sequence.translate(str.maketrans("ATGC", "TACG"))[::-1] print(f"3' {complement} 5'") # Przykładowe dane gene_sequence = "ATGCGGCTAGCGACGGGAATTGAACCCGCGATGG" gRNA = "GACGGGAATTGAACCCGCGA" # 20 nt pam = "TGG" # PAM (NGG) gRNA_position = 12 # Gdzie w sekwencji zaczyna się gRNA # Wywołanie funkcji print_crispr_target(gene_sequence, gRNA, pam, gRNA_position)