IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

Grandeur des valeurs numériques


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Mai 2009
    Messages
    50
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2009
    Messages : 50
    Par défaut Grandeur des valeurs numériques
    Bonjour, je cherche une information plus au moins simple:

    Mon but est d'ajouter l'unité des chiffres à la fin de toutes les lignes que je recherche en ajoutant par exemple, 'K' avec un chiffre avec 3 zéro , avec six chiffre 'M'....
    Je recherche à traduire un chiffre selon sa grandeur en python:
    Voici le code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
        list=['K', 'M']    
        i = 0
            while (bandwidth[i].isdigit()):
                i += 1
            bandwidth_value = bandwidth[0:i]
            if bandwidth_value == xxxxxxx:
                bandwidth_value = bandwidth + list[1]
    C'est à la place de 'xxxxx', que je dois introduire la condition, et j'ai supposé qu'il s'agit d'un chiffre à 3 zéros

    Et merci d'avance

  2. #2
    Membre émérite
    Homme Profil pro
    heu...
    Inscrit en
    Octobre 2007
    Messages
    648
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : heu...

    Informations forums :
    Inscription : Octobre 2007
    Messages : 648
    Par défaut
    hmmm... pas très clair tout ça...
    Quel est le contexte ?
    Que contient bandwidth ?

    Encore une fois Annass, sois plus rigoureux dans l'énonciation de ton problème. C'est exactement comme un problème de math : si il manque un paramètre, le problème peut devenir insoluble...

    Si ça se trouve ton problème serait déjà résolu à l'heure qu'il est ...

    ex: Soit AB BC et AC, Que vaut AB+BC ? (de quoi parle-t-on ? des vecteurs, des longueurs ? quelles sont les valeur associées ? etc...)

    EDIT: Bon... analysons malgré tout ton code...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
        i = 0
            while (bandwidth[i].isdigit()):
                i += 1
    Apparemment bandwidth serait un string. Et à l'issu de cette boucle i est l'index du premier caractère non-digital
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
            bandwidth_value = bandwidth[0:i]
            if bandwidth_value == xxxxxxx:
                bandwidth_value = bandwidth + list[1]
    Bon, l'orde de grandeur de bandwidth_value (qui est un string compsé de digit) peut être déterminé grâce à la longueur de sa chaine (qui ici est égale à i). Tu pourrais avantageusement remplacer list par un dico, les lettres représentant un ordre de grandeur et pour valeur une fonction lambda vérifiant l'appartenance de la valeur passée en paramètre à cette fonction, en partant de principe que par exemple pour des Ko on puisse avoir jusqu'a 999Ko avant de "passer" au Mo. Le tout donnerait quelque chose du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
            list={'K': lambda x: 0<=x<4, 'M': lambda x: 4<=x<7}    
            i = 0
            while (bandwidth[i].isdigit()):
                i += 1
            bandwidth_value = bandwidth[0:i]
            for o_g in list:
                if list[o_g](i):
                    bandwidth_value+=o_g
                    break
    La solution que je t'ai donnée est une solution un peu à l'arrache, il en existe plein d'autre, ce n'est qu'une question de logique.
    Tu m'diras aussi, y'a que de ça dans la programmation...

  3. #3
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Mai 2009
    Messages
    50
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2009
    Messages : 50
    Par défaut
    Il s'agit d'une ligne qui contient à la fois des lettres et des chiffre. Je cherche à touver les chiffre dans un premier temps, et ajouter l'unité à la fin. C'est tout

  4. #4
    Membre très actif

    Profil pro
    Inscrit en
    Juin 2007
    Messages
    211
    Détails du profil
    Informations personnelles :
    Âge : 75
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2007
    Messages : 211
    Billets dans le blog
    1
    Par défaut
    Salut anass_59,

    C'est un peu flou tout ça.
    C'est quoi, pour toi, une ligne ?

    Soit c'est une chaine de caractères et alors on appelle ça une "string" et elle est délimitée par " " ou ' ' dans le code python.
    Soit c'est une liste (un tuple, un dictionnaire) et alors ce sont des "éléments" distincts indépendants les uns des autres comme par exemple :
    maListe = [1, 'a', 25, 'acd', 12.5, 'rez', 0, 11]

    Dans ce cas, il te suffit de lire chacun des éléments de la liste et de tester si c'est un nombre, un chiffre puis d'effectuer le traitement que tu veux.

    Si ce que tu cherches est dans une phrase comme par exemple :
    maPhrase = "J'ai trouvé 2357 mots sur la feuille".
    Alors ici, si tu veux trouver le nombre 2357, tu dois rechercher les espaces qui composent la phrase puis tester la chaine de caractère contenue entre deux espaces consécutifs dans la phrase.
    Attention au traitement du premier mot et du dernier qui n'ont peu-être pas d'espace de chaque côté : le premier n'a rien, le dernier peut en avoir un, avoir une ponctuation, un 0 de fin de chaine, un saut à la ligne.

    A+

  5. #5
    Membre émérite
    Homme Profil pro
    heu...
    Inscrit en
    Octobre 2007
    Messages
    648
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : heu...

    Informations forums :
    Inscription : Octobre 2007
    Messages : 648
    Par défaut
    Citation Envoyé par anass_59 Voir le message
    Il s'agit d'une ligne qui contient à la fois des lettres et des chiffre. Je cherche à touver les chiffre dans un premier temps, et ajouter l'unité à la fin. C'est tout
    C'est déjà un peu plus clair... mais il reste encore des questions que l'on peut se poser... Papy Octe en à déduit que bandwidth était une liste avec des integers (peut-être même des floats ?), et des strings. Perso, j'en ai déduit que que bandwidth était un string qui contenat des caractères alpha numériques. Tu vois comme le manque de précision peut être ouvert à différentes interprétations ?
    Ensuite, doits-tu récupérer tous les chiffres de ton string, ou bien seulement tous ceux situés au début de la chaîne ? J'ai supposé que c'était tous ceux du début. Pour le reste, voir l'edit de mon dernier post.

  6. #6
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Mai 2009
    Messages
    50
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2009
    Messages : 50
    Par défaut
    Désolé si je ne suis pas assez précis, mais c'est surtout à cause de l'ampleur du projet, car en fait la plupart des fonction sont liées. Je vais tenter d'être le plus clair possible:

    Donc il s'agit d'un traitement de fichier texte, je recherche à récupérer les valeur numériques qui se trouvent sur les lignes du textes qui contiennent bandwidth, en voici une:

    bandwidth 155000
    Donc je veux non seulement récupérer le chiffre qui est contenu dans la ligne, mais aussi ajouter les unités équivalentes . Merci.

    Pour ceux qui souhaitent voir le projet et m'aider dessus, contactez moi par MP. Car c'est pas le seul problème que je rencontre...

  7. #7
    Membre émérite
    Homme Profil pro
    Inscrit en
    Décembre 2007
    Messages
    758
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Décembre 2007
    Messages : 758
    Par défaut
    bonjour,

    si je comprends bien tu extrais des lignes de la forme:
    d'un texte. Les valeurs sont dans une certaine unité (des octets ?) et tu veux afficher le résultats soit en kilooctets soit en mégaoctet en fonction de la valeur ?

    genre quelquechose comme ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    import math
     
    def affiche(value):
     
        if math.log10(value)>=6:
            print value/1.e6,"M"
        elif math.log10(value)>=3:
            print value/1.e3,"K"
        else:
            print value
    exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    >>> affiche(1.)
    1.0
    >>> affiche(999.)
    999.0
    >>> affiche(1024.)
    1.024 K
    >>> affiche(100000.)
    100.0 K
    >>> affiche(1000000.)
    1.0 M

Discussions similaires

  1. [C# 2.0] MaskedTextBox qui ne permet que des valeurs numériques
    Par Mast3rMind dans le forum Windows Forms
    Réponses: 9
    Dernier message: 01/09/2006, 10h33
  2. Meilleur type table pour stocker des valeurs numérique
    Par vodevil dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 22/04/2006, 20h42
  3. souci avec le format des valeurs numériques.
    Par LESOLEIL dans le forum Langage
    Réponses: 9
    Dernier message: 05/04/2006, 16h12
  4. Trier une colonne avec des valeurs numériques ou textes
    Par jfc dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 07/02/2006, 11h15
  5. [xslt] filtrer des valeurs numériques
    Par yos dans le forum XSL/XSLT/XPATH
    Réponses: 3
    Dernier message: 20/09/2005, 12h01

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo