-1
votes

Identifier les espaces entre des virgules

Je dois identifier si il y a un espace entre un nombre et une virgule, alors ce nombre est invalide. Donc, si le nombre a plus ou moins de 2 décimales et / ou des espaces blancs entre les virgules, il n'est pas valide, mais s'il n'a pas de blouse entre les virgules et dispose de 2 décimales, il s'agit d'un nombre valide. C'est pourquoi le premier numéro de la ligne 1 est valide

Il y a deux méthodes, je préfère travailler sur la méthode 2 mais je pensais que si je pose deux méthodes, cela pourrait vous aider à ajouter sur P>

Line 1: INVALID VALID INVALID

Line 2: VALID INVALID VALID


4 commentaires

Pourquoi LIGNE 1 PREMIER NUMBRE serait-il invalide?


1, devrait être valide car il ne commence pas par une espace blanche, j'ai supposé que et essayé de proposer une réponse @ slashx43. Vérifiez-le


@Sebastentid Désolé j'ai oublié de mentionner quels numéros qualifiés comme valides ou invalides j'ai mis à jour ma question


Merci pour la mise à jour @ slashx43, j'ai mis à jour mes conditions dans la réponse en fonction de votre nouvelle entrée, veuillez regarder un look


4 Réponses :


0
votes

avec décimal.decimal objet code>, vous pouvez récupérer l'exposant, ce qui vous indique en quelque sorte le nombre de décimales ( Voir DOCS ):

#with line = "1,1.02, 123.0005"
'Line 1: INVALID VALID INVALID'

#with line = "1.02, 1.02 , 1.02"
'Line 2: VALID INVALID INVALID'


0 commentaires

1
votes

Vous pouvez diviser les chaînes avec , et décidez si la chaîne est valide ou invalide sur la base de si les stars de la chaîne avec un espacement xxx

La sortie sera xxx


2 commentaires

Je vois comment ça marche mais quand je l'ai mis dans mon code, il n'imprime pas la ligne 1: valide invalide non valide. Il est juste de dire que la syntaxe non valide est la dernière citation de la déclaration d'impression. Quel est le but du F dans la déclaration d'impression? Si je supprime le F, alors il imprime: Line {IDX + 1}: {'' .join (res)} ligne {iDX + 1}: {'' .Join (res)}


Aah d'accord, quelle version Python utilisez-vous? Ce sont des chaînes F, une nouvelle façon de formater une chaîne, mais pour Python3.6 et plus, de toute façon que je suis retourné à une chaîne plus ancienne.Format qui devrait fonctionner pour vous @ slashx43, vous pouvez essayer à nouveau et cela fonctionnera pour vous



1
votes

Essayez ceci: xxx

lecture de fichier: xxx

sortie: Ligne1: valide valide non valide


2 commentaires

Ceci est utile mais je reçois la liste des numéros d'un fichier texte et non du code lui-même.


J'ai déjà mis à jour le code et j'ai ajouté une partie à lire le fichier de formulaire



0
votes

Une compréhension de la liste basée sur la fractionnement sur des virgules et un petit trucs de cordes seraient beaucoup plus simples:

line="1,1.02, 123.0005"
result = " ".join("IN"*(" " in s)+"VALID" for s in line.split(","))
print(result) # VALID VALID INVALID


4 commentaires

Je pense que la lisibilité / la compréhension importe plus que la réduction du nombre de lignes de code. Le "in" * ("" dans s) est un pur ol 'sorcellerie.


@Toothpick anemone, je suis d'accord avec vous sur le problème de la lisibilité. Il est parfois difficile d'exorciser le démoniste Python en moi :)


@Alaint. merci mais j'ai besoin de lire / écrire les chiffres d'un fichier texte et non des chiffres du code lui-même


Étant donné que votre code montre que vous savez déjà comment lire des lignes d'un fichier, je ne croyais pas qu'il était pertinent de répéter cette partie. J'ai également senti que cela beurrerait la solution réelle sous le code de la plaque de chaudière.