Aide random
latata
-
bcleo -
bcleo -
Bonjour, j'ai une exercice a effectuer, et j'ai un petit soucis, je m'explique :
je dois créer une chaine de proteine aleatoire, créer une chaine de proteine modifier aléatoirement et le nombre de difference qu'il y a entre la proteine crée et celle modifiée (distance de hamming).
voici mon script :
J'ai deux soucis :
-j'aimerais garder la forme de string dans la premier fonction mais je n'y arrive qu'avec des listes
-lorsque je demande une séquence de 20 puis 10 modification, lorsque qu'il me retourne difference, je n'arrive jamais a trouver exactement les 10 modifications entre les 2 sequence de proteine alors qu'il devrait me les donner.
J'ai essayé pendant de longues heures que l'ensemble fonctionne mais j'ai toujours un petit hic, pourriez vous m'aider ??
En vous remerciant !
je dois créer une chaine de proteine aleatoire, créer une chaine de proteine modifier aléatoirement et le nombre de difference qu'il y a entre la proteine crée et celle modifiée (distance de hamming).
voici mon script :
import random def seq_alea(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 difference(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 modification(seq,num_subs): seq1=seq2=list(seq) seq2=list(seq) for i in range(num_subs): ahboni=random.randint(0,(len(seq2))) seq2[ahboni]=randseq(1,alpha) print (seq1) print (seq2) return difference(str(seq1),str(seq2)) alpha="ARNDBCEQZGHILKMFPSTWYV" print ("Quelle longueur") num=int(input()) seq=randseq(num,alpha) print ("Combien de modif dans cette sequence") num_subs=int(input()) modification(seq,num_subs)
J'ai deux soucis :
-j'aimerais garder la forme de string dans la premier fonction mais je n'y arrive qu'avec des listes
-lorsque je demande une séquence de 20 puis 10 modification, lorsque qu'il me retourne difference, je n'arrive jamais a trouver exactement les 10 modifications entre les 2 sequence de proteine alors qu'il devrait me les donner.
J'ai essayé pendant de longues heures que l'ensemble fonctionne mais j'ai toujours un petit hic, pourriez vous m'aider ??
En vous remerciant !
A voir également:
- Aide random
- Chat random - Accueil - Réseaux sociaux
- Random Java ✓ - Forum Java
- Timer random - Forum Java
- Wow random ✓ - Forum Jeux vidéo
- Random. chat - Accueil - Réseaux sociaux
2 réponses
yg_be
Messages postés
23541
Date d'inscription
Statut
Contributeur
Dernière intervention
Ambassadeur
1 584
bonjour,
pourquoi devrait-il te donner 10 modifications?
as-tu, dans difference, imprimé seq1, seq2 et count?
où est définie la fonction randseq?
pourquoi devrait-il te donner 10 modifications?
as-tu, dans difference, imprimé seq1, seq2 et count?
où est définie la fonction randseq?
Bonjour,
J'ai mit des commentaires dans ton code, et montré ce qui ne va pas en les améliorant.
J'ai mit des commentaires dans ton code, et montré ce qui ne va pas en les améliorant.
import random def randseq(num, alpha): seq1 = [] for i in range(num): # ahbon=random.randint(0,(len(alpha)-1)) # Plutôt qu'utliser randint utilise randrange (borne d'arrêt non incluse) # ahbon = random.randrange(len(alpha)) # seq1.append(alpha[ahbon]) # Mais comme tu as besoin de tirer un élément au hasard parmi alpha # Alors choice est plus judicieuw seq1.append(random.choice(alpha)) return "".join(seq1) def difference(seq1, seq2): count = 0 # j=0 inutile # Surtout pas de -1, autrement le dernier élément ne sera pas lu # for i in range(0,len(seq1)-1): for i in range(len(seq1)): # Pas besoin de parenthèses if seq1[i] != seq2[i]: count += 1 # j=j+1 # print (count) return count # Cette fonction doit recevoir également alpha pour savoir sur quoi piocher # une valeur aléatoire def modification(seq, num_subs, alpha): # Aucun intérêt à assigner à seq2 la même chose que seq1 # seq1=seq2=list(seq) # Et plutôt que de travailler sur la liste, le travail se fait sur les indices seq_indices = list(range(len(seq))) seq_finale = list(seq) for i in range(num_subs): # Comme au-dessus on utilise choice mais sur seq_indices indice = random.choice(seq_indices) # suppression dans la liste pour ne pas le piocher 2 fois seq_indices.remove(indice) # Choix du remplacement valeur = random.choice(alpha) # Et finalement Remplacement dans la seq_finale seq_finale[indice] = valeur # ahboni=random.randint(0,(len(seq2))) # seq2[ahboni]=randseq(1,alpha) # print (seq1) # print (seq2) # C'est pas ici que tu dois retourner la différence # Ou alors j'ai pas compris ce que dois faire cette focntion # D'où l'intérêt de nommer avec un nom représentatif les fonctions # return difference(str(seq1),str(seq2)) return ''.join(seq_finale) # Sachant que l'on souhaite modifier x éléments dans n éléments # Alors on peut raccourcir cette fonction en utilisant random.sample def modification(seq, num_subs, alpha): seq_indices = random.sample(range(len(seq)), num_subs) seq_finale = list(seq) for i in seq_indices: valeur = random.choice(alpha) seq_finale[i] = valeur return ''.join(seq_finale) alpha = "ARNDBCEQZGHILKMFPSTWYV" # input peut reçcevoir une chaîne à afficher. # print("Quelle longueur") num = int(input("Quelle longueur ?\n")) seq = randseq(num,alpha) # print ("Combien de modif dans cette sequence") num_subs = int(input("Combien de modif dans cette sequence ?\n")) seq_modifiee = modification(seq, num_subs, alpha) print(seq) print(seq_modifiee) print('nombre de différences :', difference(seq, seq_modifiee))
Merci pour ta reponse ! Pour un petit nombre (60 et 12 modif, cela marche bien, merci :)
cependant il m'est demandé de faire une seq de 1000 lettre avec 100 modif, lorsque je le fais avec ton script, le nombre de modification donnée est 95 par la suite, c'est justement ça que je cherche à faire :)
En te remerciant !
cependant il m'est demandé de faire une seq de 1000 lettre avec 100 modif, lorsque je le fais avec ton script, le nombre de modification donnée est 95 par la suite, c'est justement ça que je cherche à faire :)
En te remerciant !
Il devrait me donner 10 modifications car dans la fonction modification je lui en demande 10, il devrait donc les detecter dans la fonction difference
C'est à dire imprimer ?