Aide problème liste vide
ahbon
-
khrug -
khrug -
Bonjour, j'ai effectué ce programme, mon problème c'est que dans ma fonction experiment, je n'arrive pas a stocké mais valeur dans ma liste data, cela viens surement de ma fonction hamming qui retourne une difference entre 2 sequence, ce dont j'ai besoin dans la liste (je veux une liste de toutes les differences entre les sequence generées pour ensuite en faire la moyenne avec ma fonction mean). Après beaucoup de manipulation, j'ai du mal a trouver une solution.
En esperant que vous puissiez m'aider
Bien a vous !
En esperant que vous puissiez m'aider
import random
def alphabet(name):
global alpha
if name=="nucleic":
alpha="acgt"
print (alpha)
if name=="protein":
alpha="ARNDBCEQZGHILKMFPSTWYV"
print (alpha)
if name=="iupac_nucleic":
alpha="ACGTRYSWKMBDHVN"
print (alpha)
if name=="iupac_protein":
alpha="ARNDBCEQZGHILKMFPSTWYV"
print (alpha)
def randseq(num,alpha):
seq1=[]
for i in range(0,num):
ahbon=random.randint(0,(len(alpha)-1))
seq1.append(alpha[ahbon])
seq="".join(seq1)
return seq
def hamming(seq1,seq2):
count=0
j=0
for i in range(0,len(seq1)-1):
if (seq1[j] != seq2[j]):
count=count+1
j=j+1
print (count)
def mutate(seq,num_subs):
seq1=list(seq)
seq2=list(seq)
for i in range(num_subs):
ahboni=random.randint(0,(len(seq2)-1))
seq2[ahboni]=randseq(1,alpha)
return hamming(str(seq1),str(seq2))
def experiments(le,su,nb):
for i in range(nb):
seq=randseq(le,alpha)
print (mutate(seq,su))
data.append(mutate(seq,su))
return data
import math
def mean(data):
somme=0
for i in list(data):
somme=somme+data[i]
moyenne=somme/len(data)
return moyenne
def variance(data):
k = 0
for x in data:
k += 1
if k == 1:
M = x
S = 0
else:
Mnext = M + (x - M) / k
S = S + (x - M)*(x - Mnext)
M = Mnext
return (S/(k-1))
def std(data):
return math.sqrt(var)
data=[]
alpha=""
name=str(input("Quel est le type?\n"))
alphabet(name)
le=int(input("Quelle longueur ?\n"))
su=int(input("Combien de substitution dans cette sequence?\n"))
nb=int(input("Combien de fois vous lez vous renouvelez l'experience?\n"))
experiments(le,su,nb)
print ("la liste de distance de hammin est",data)
#STAT
print ("la moyenne est",mean(data))
print ("la variance est",variance(data))
var=variance(data)
print ("le std est",std(data))
Bien a vous !
A voir également:
- Aide problème liste vide
- Liste déroulante excel - Guide
- Supprimer page word vide - Guide
- Liste code ascii - Guide
- Caractere vide - Guide
- Liste déroulante en cascade - Guide
1 réponse
Bonsoir,
En ce qui concerne ton problème, c'est simple, ta fonction hamming ne retourne rien, alors qu'elle devrait retourner count.
Sinon, si tu ne prends pas en compte ce qui t'a été dit, à quoi ça sert ?
Je t'ai conseillé d'utiliser choice, tu ne le fais pas.
Je t'ai dit que dans un range, il ne fallait pas enlever -1 d'une longueur de chaîne, tu ne l'a pas pris en compte, alors que c'est très important.
Une liste comme
Si on fait
On obtient
Donc ton code dans hamming ne comparera pas la dernière valeur, et ton résultat sera faussé.
Autre chose, tu as fait 2 fonctions mean et variance.
Le module statistics de python propose ces deux fonctions ;)
En ce qui concerne ton problème, c'est simple, ta fonction hamming ne retourne rien, alors qu'elle devrait retourner count.
Sinon, si tu ne prends pas en compte ce qui t'a été dit, à quoi ça sert ?
Je t'ai conseillé d'utiliser choice, tu ne le fais pas.
Je t'ai dit que dans un range, il ne fallait pas enlever -1 d'une longueur de chaîne, tu ne l'a pas pris en compte, alors que c'est très important.
Une liste comme
l = [1, 2, 3].
Si on fait
[l[i] for i in range(len(l) - 1)].
On obtient
[1, 2].
Donc ton code dans hamming ne comparera pas la dernière valeur, et ton résultat sera faussé.
Autre chose, tu as fait 2 fonctions mean et variance.
Le module statistics de python propose ces deux fonctions ;)
Je n'ai le droit d'utiliser que randint, je m'en suis rendu compte hier.. et oui désolée je m'étais trompais de fichier javais bien pris en compte toute tes corrections, mais a force je me perds dans mes fichiers..
Je vais revoir ma fonction hamming
Désolé alors si tu avais bien prit en compte cela ;)
Je n'ai le droit d'utiliser que randint, je m'en suis rendu compte hier..
Ah donc, c'est un projet ou un exercice à faire.
Je comprends qu'on force les élèves à ne pas utiliser de fonctions trop abouties, mais dans le cas de choice, c'est tout de même du basique.
Si j'étais encore un élève, je mettrai au début de mon code une note comme
# Voici ma propre fonction choice, mais comme le module random fournit cette # fonction et qu'il est inutile de réinventer la roue, j'utilise dans mon code # celle du module random # def choice(seq): # i = random.randint(0, len(seq)-1) # return seq[i]Pour montrer au prof qu'on sait faire cette fonction et que forcer à utiliser randint n'est clairement pas pertinent dans le cadre de l'exercice.