[Déplacé]convertion python en vb2010

Signaler
-
 NeoRonin -
Salut,

Quelqu'un pourrait me convertir se code pour python en visual basic 2010.

Merci



def(Algo(chars))
    factor = [7, 3, 1]        
    result = 0         

    for index, char in enumerate(chars.upper()):               

        if char == '<':                        
            char = 0                

         elif char >= 'A' and char <= 'Z':                        
            char = ord(char) - 55                

        else:                        
            char = int(char)                 


        result += char * factor[index % 3]         

    return result % 10 print 


Algo('numero de telephone')


merci

28 réponses

Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
235
Bonjour,
venir dans la section
Forum > Visual Basic 6 > Langages dérivés > VBA

pour demander la transposition d'un code
pour python en visual basic 2010

est pour le moins surprenant.
C'est aux développeurs Python, dans la section adéquate, que tu devrais poser une telle question. Tu devrais, en fait, non pas demander une transposition, mais ce qu'exécutent ces instructions et écrire ensuite ton propre code sur la base de ces précisions !
Au demeurant : le code montré est on ne peut plus simple, évident et ultra-facile à comprendre !!!
Et sa transposition en VB l'est encore plus (traitement simple en boucle sur ces caractères, d'une chaîne de caractères !)
________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
235
(traitement simple en boucle sur ces caractères, d'une chaîne de caractères !)

ou plutôt d'un array de caractères, d'ailleurs.

________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
Messages postés
14770
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
27 février 2021
151
Bonjour,

Il n'est pas intéressant de convertir un code "tel-quel", essayes plutôt de reproduire le fonctionnement, tu en apprendras plus.
Comme le code est fourni sans explication sur son but, je ne pense pas qu'une personne fera la conversion pour toi.

---------------------------------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS, celui-ci pour bien poser votre question ou encore celui-ci pour les PFE et autres exercices.[*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : ).[*]En VB.NET pensez à activer Option Explicit et Option Strict (propriété du projet) et à retirer l'import automatique de l'espace de nom Microsoft.VisualBasic (onglet Références dans les propriétés du projet).[*]Si votre problème est résolu (et uniquement si c'est le cas), pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés/list
---
Mon site
Merci de vos participation.

Alors je debute en VB, et ces ceux code qui me lance à faire une application en VB.

Alors je veux bien essaye, de le transposer.

Par contre je vais peut etre pas utilise les bon termes pour definir ce que je comprend.

Alors pour moi "Algo" est un fonction qui est appele en fin.
'Char' conrespond a une variable ou est stoker les données que l on doit utiliser pour le calcul.

for index, char in enumerate(chars.upper()):'

par contre celle ci je comprend pas du tout, ainsi que
'result += char * factor[index % 3] '

et
'return result % 10 print '
le print sa va ses pour afficher à l'ecran.


Apres voila comment je penserais convertir cette partie :
if char == '<':                        
            char = 0                

         elif char >= 'A' and char <= 'Z':                        
            char = ord(char) - 55                

        else:                        
            char = int(char


en

dim char as string = 0
if char = '<' then
      char = 0


Voila pour le debut.
Apres pouvez m orientez


Merci
Messages postés
14770
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
27 février 2021
151
Bonjour,

Fais plus simple, que fait ce code (sans entrer dans le détail su code), quelle sortie correspond à quelle entrée ?

---------------------------------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS, celui-ci pour bien poser votre question ou encore celui-ci pour les PFE et autres exercices.[*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : ).[*]En VB.NET pensez à activer Option Explicit et Option Strict (propriété du projet) et à retirer l'import automatique de l'espace de nom Microsoft.VisualBasic (onglet Références dans les propriétés du projet).[*]Si votre problème est résolu (et uniquement si c'est le cas), pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés/list
---
Mon site
Tu me parle trop technique la :)

Sa fai seulement 3 jours que je suis sur un tuto :)

result += char * factor[index % 3]


Je dirais que la sortie ses result et les entrees sont char et factor ?

Desole d'etre aussi noob ;)
Voila une parti du code, il me manque le principal que je n'arrive pas à decoder du python

Module Module1

    Sub Main()
        Dim Algo As String = 0
        Dim Resultat As String = 0
        'Saisi des caracteres à calculer
        Algo = Console.ReadLine()
        'ici devrait etre l'algo qui est applique

        'Affiche le resultat obtenu apres calcul
        Console.WriteLine(Resultat)
        'Pause avant de fermer la fenetre
        Console.Read()

    End Sub

End Module
Messages postés
14770
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
27 février 2021
151
Bonjour,

Je ne connais pas python non plus (trop mordant), bien, que je suppose comprendre 2/3 lignes du code, je ne vois pas l'ensemble.

D'où sors-tu ce code ?
Pourquoi cherches-tu à le convertir ?

---------------------------------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS, celui-ci pour bien poser votre question ou encore celui-ci pour les PFE et autres exercices.[*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : ).[*]En VB.NET pensez à activer Option Explicit et Option Strict (propriété du projet) et à retirer l'import automatique de l'espace de nom Microsoft.VisualBasic (onglet Références dans les propriétés du projet).[*]Si votre problème est résolu (et uniquement si c'est le cas), pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés/list
---
Mon site
Je sais plus ou je l'ai trouve.
J ai cherche sur le net.

Pkoi en VB, afin de faire le soft avec une fenetre windows et des bouttons :)
Le rendre plus agreable :)

Tu peux m aider sur la convertion....
Merci
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
235
Relis ce que je t'ai dit plus haut !
Chars parait être un array (un tableau dynamique à une dimension) dont chaque élément (char) est un caractère
Et ceci explique cela :
for index, char in enumerate(chars.upper()):

il s'agit d'une boucle sur les index des éléments (char) de chars. Chaque élément y est porté en majuscules avant de subir les expressions conditionnelles qui suivent la ligne de code montrée et transforment la valeur de Char
Cette valeur/résultat est ensuite multiplié par le triple de l'élément de même index de la suite factor.
Pour le reste :
Sa fai seulement 3 jours que je suis sur un tuto :)

Si selon toi, apprendre à l'aide d'un "tuto", c'est aller chercher un code tout fait ailleurs et de surcroît dans un autre langage, tu fais de manière évidente FAUSSE ROUTE et je ne crois pas que nous sommes là pour participer à ce "genre" d'approche. Désolé de te le dire aussi crument, mais c'est ainsi.
Ce que je t'ai exposé du code que tu sembles te contenter de vouloir transposer devrait TRES LARGEMENT te suffire, pour peu que tu sois un peu sérieux !

________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ

Bonsoir,

A mon avis, on énumère chaque caractère d'une chaine qu'on met en majuscule.
Si c'est une lettre on enlève 55 a son code ascii.
Puis on incrémente une variable 'result' du chiffre obtenu par une valeur contenue dans le tableau 'factor'.
Je ne sais pas ce que fait % en python.

Je ne connais pas python non plus (trop mordant)

C'est justement pour ça qu'on l'appelle python
ok je sors...
Alors j ai regarder un peu et le % en ptyhon veux dire modulo :)

Alors le resultat de ceux code et de generer une cle de verification.
Donc il doit transformer de caractere en numerique afin d'applique le calcul.

Et il donne un chiffre en resultat.

Honnetement j ai du mal a vous suivre :(

Pour ucfoutu peut etre que ses pas la bonne solution, mais comme dit avant je souhaite en faire un soft graphique. Apres je demande juste un eguillement avec des exemples.

Merci en tout cas de suivre le fil :)
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
235
Bonjour Banana32,
Il s'agit bel et bien d'une énumération chars de caractères et non d'une chaîne de caractères
La variable index est l'index de chacun de ces caractères (char) dans l'énumération
Mais on a atteint là toutes les conditions qui font que je me retire, personnellement.
Car notre ami n'est pas du tout en train de développer, mais de transposer un développement (voir ce que j'en dis plus haut) et j'en suis profondément désolé (pour lui d'abord).



________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
Pour ceux qui veulent tjrs m'aider :)
Je rappel le source python
def(Algo(chars))                               	
    factor = [7, 3, 1]        			
    result = 0         				

    for index, char in enumerate(chars.upper()):#

        if char == '<':                        
            char = 0                

         elif char >= 'A' and char <= 'Z':                        
            char = ord(char) - 55                

        else:                        
            char = int(char)                 


        result += char * factor[index % 3] 

    return result % 10 print 


Algo('numero')


Voila ce que j ai reussi a transposer, à savoir que je ne suis absolument pas sur.
J'ai essaye de comprendre les enumeration mais j ai un peu de mal :(


Module Module1
    Sub Main()
        Console.WriteLine(Algo(3))
        Console.Read()
    End Sub
    Function Algo(ByVal chars As String) As String
        Dim Factor As String
        Dim Result As String
        Factor = ( ???)
        Result = 5
        Result = 4 * Factor
        Return Result
    End Function

End Module



merci
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
235
Le "bout de code" montré (qui me semble en plus contenir une petite erreur) est tout simplement celui qui, en Python, a pour but d'établir ou vérifier la clé de contrôle d'une carte nationale française d'identité.
Si c'est là le devoir que tu as à faire :
ouvre wikipedia. Lis comment cette clé est construite (ses bases).
Utilise VB pour la construire ou la vérifier sur ces bases-là, directement.
Il s'agit vraiment là de quelque chose de fort simple, pour autant que tu y mettes du tien !
Reviens avec le code VB que tu auras au moins commencé à écrire par toi-même et nous t'aiderons alors si vraiment encore en difficulté


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
Messages postés
14770
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
27 février 2021
151
Bonjour,

Bon, je vais aider un peu plus (merci Ucfoutu pour l'info) :
Une clé est composée de chiffres et de lettres, chacun a une valeur :
0 - 9 : 0 - 9
A - Z : 10 - 35

Ensuite, pour calculer la clé, il faut multiplier le nombre obtenu avec un chiffre dépendant de sa position :
1 -> 7
2 -> 3
3 -> 1
4 -> 7
5 -> 3
6 -> 1
...
(Donc, l'utilisation du modulo est cohérente)

Ensuite, il ne faut garder que le chiffre des unités de la somme obtenue comme clé.

Bon courage, c'est en codant que l'on devient codeur :)

Mon site
Merci de continué à m'aider.

Alors voila ceux que j'ai trouvé.
Une explication de ce que fait le code :)



les chiffres de contrôles doivent être calculés sur la base du modulo 10 avec factorisation respective 731 731

exemple
date de naissance :16/01/1976
sous sa forme numérique ça donne 7 6 0 1 1 6
factorisation 7 3 1 7 3 1
=7*7+6*3+0*1+1*7+1*3+6*1
=49+18+0+7+3+6=83
83 div 10=8 reste 3

le chiffre de contrôle qui suit la date de naissance est donc 3



Donc si je suis ton resonement Nhenry, les chiffres de 0 à 9 ont pour valeur 0 à 9, et A à Z ont pour equivalence en nombre 10 à 35, en sachant qur '>' lui est egal à 0

Donc, il faudrait que je dise au programme d'identifier selon le caractere saisi qu'il attribut une valeur à celui ci.Pour ensuite effectuer les mutiplication et le modulo de la fin

Ex:
Dim Variable0 As string = 0
Dim Variable1 As string = 1
Etc...
Dim VariableA As string = 10
Dim VariableB As string = 11
Etc...



Ou bien je m'egard ...
Je vois pas trop quoi utilise ? A moin de faire un tableau peut etre avec les valeur.
Je sais pas trop. Apres j ai bien compris le principe du calcul, mais la mise en forme du code ses autres chose.
Comme expliquer precedement je commence dans le VB, j'ai pas forcement en tete toute les possibilites.

Merci.
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
235
A bûcher
l'opérateur Mod
Ce qu'est un array et la lecture de ses éléments (correspondant à un index)
Ce qu'est un tableau dynamique. La lecture de ses éléments dans un boucle For to Next. Ce qu'y est Ubound, également.
Tu vas t'y mettre ? Tu vas commencer ? Quand ?
Pour ton info : ce sont là des choses que chacun a appris en moins d'une demie-heure, à ses débuts !



________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
Messages postés
14770
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
27 février 2021
151
Bonjour,

Concernant la mémorisation du poids des caractères dans la liste, un dictionnaire fait l'affaire :

Dim MonDict As New Dictionary(Of Char,Integer)
MonDict.Aff("8",8)
MonDict.Aff("A",10)
MonDict.Aff(">",0)


Puis :
PoidsCar=MonDict(MonChar)

Mais, si tu veux un code commenté tout fait, sache que ce n'est pas sur ce forum que tu le trouveras (du moins dans les réponses de ce sujet, dans les sources par contre ...).

Mon site
Module Module1

    Sub Main()
        'initialisation des variables
        Dim MonTableau(35) As Integer

        'Remplissage du tableau de nb de 0 à 35
        For i As Integer = 0 To MonTableau.Length
            MonTableau(i) =  ' ici j'ai pas trouver comment dire au soft de remplir mon tableau de 0 à 35
        Next

    End Sub

End Module

Alors voila sous forme de tableau. (Tableau à une colonne.
Je pense que je devrais faire un tableau à 2 colonne. Pour y mettre de 0 à Z avec les equivalence en nombre Je sais pas si je suis assez clair dans mes explication.

Ensuite je devrais dire au soft d'aller chercher l'equivalence du charactere saisi dans le tableau.
Une fois les equivalence recuperer effectuer le calcul.
Que je verrais apres :) chaque chose en son temps :)

Pouvez deja me dire si je brule ou si je me trompe complement :) et ainsi me rediriger.

Desole pour NHenry, j 'ai pas suivi don resonement, car en fait je comprend pas trop ton code.
Je l'ai commante dis moi si je comprend ou pas :)
'initialisation de la variable MonDict (par contre tu ne lui attribut tout de suite si s'est 
'un integer,string, etc...
' Je ne connais pas trop New Dictionary(Of Char, integer)  <- on appel sa un index se qui est 
' entre parenthese ? Apres je vois quel valeur il retour "character" est en suite sont equivalence
Dim MonDict As New Dictionary(Of Char,Integer) 
MonDict.Aff("8",8)
MonDict.Aff("A",10)
MonDict.Aff(">",0) 


'apres la je pense qu'il faut aussi initialise cette variable PoidsCar.
PoidsCar=MonDict(MonChar)


Apres si vous avez de bon tuto à me conseiller je suis preneur. Moi je lis celui du siteduzero.

Merci