This repository has been archived by the owner on Jun 3, 2024. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathdna_simulation.py
115 lines (111 loc) · 3.12 KB
/
dna_simulation.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
#This program is free software: you can redistribute it and/or modify
#it under the terms of the GNU General Public License as published by
#the Free Software Foundation, either version 3 of the License, or
#(at your option) any later version.
#This program is distributed in the hope that it will be useful,
#but WITHOUT ANY WARRANTY; without even the implied warranty of
#MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
#GNU General Public License for more details.
#You should have received a copy of the GNU General Public License
#along with this program. If not, see <http://www.gnu.org/licenses/>.
#Created by Alexander Kehr
import random
import time
dna_sequence = raw_input("DNA_sequence>")
ticks = raw_input("Ticks>")
N = len(dna_sequence)
N = int(N)
change_IDs = []
counter = int(0)
def dna_changeH(N):
return(random.randrange(1, N))
def dnaID (N):
erfolg = "false"
while (erfolg == "false"):
ID = random.randrange(1, N)
if ID in change_IDs:
nana = 'pointless' #do nothing
else:
erfolg = "true"
change_IDs.append(ID)
def changeInto():
into = random.randrange(0, 3)
if into == 0:
return("A")
elif into == 1:
return("G")
elif into == 2:
return("T")
else:
return("H")
def wipevalues():
change_IDs = []
def checkdna(dna_sequence):
if 'B' in dna_sequence:
return 'err'
elif 'C' in dna_sequence:
return 'err'
elif 'D' in dna_sequence:
return 'err'
elif 'E' in dna_sequence:
return 'err'
elif 'F' in dna_sequence:
return 'err'
elif 'I' in dna_sequence:
return 'err'
elif 'J' in dna_sequence:
return 'err'
elif 'K' in dna_sequence:
return 'err'
elif 'L' in dna_sequence:
return 'err'
elif 'M' in dna_sequence:
return 'err'
elif 'N' in dna_sequence:
return 'err'
elif 'O' in dna_sequence:
return 'err'
elif 'P' in dna_sequence:
return 'err'
elif 'Q' in dna_sequence:
return 'err'
elif 'R' in dna_sequence:
return 'err'
elif 'S' in dna_sequence:
return 'err'
elif 'U' in dna_sequence:
return 'err'
elif 'V' in dna_sequence:
return 'err'
elif 'W' in dna_sequence:
return 'err'
elif 'X' in dna_sequence:
return 'err'
elif 'Y' in dna_sequence:
return 'err'
elif 'Z' in dna_sequence:
return 'err'
for i in range(int(ticks)):
if checkdna(dna_sequence) == 'err':
print("DNA contains errors: " + dna_sequence)
break
counter = counter + 1
print("[STAGE " + str(counter) + "]")
haufigkeit = dna_changeH(N)
print("Haufigkeit: " + str(haufigkeit))
for i in range(haufigkeit):
dnaID(N)
print(change_IDs)
for i in range(haufigkeit):
ch_ID = change_IDs.pop()
int(ch_ID)
ch_ID1 = ch_ID - 1
DNA_part1 = dna_sequence[0:ch_ID1]
DNA_part2 = dna_sequence[ch_ID:99999]
dna_sequence = DNA_part1 + changeInto() + DNA_part2
print("")
print("## new DNA: " + dna_sequence + " ##")
print("")
change_IDs = []
time.sleep(3)
print("end of script.")