0
votes

Est-ce légitime de comparer des chaînes de fois comme ça?

print("00:00:00"<"24:00:00")
this give true. But is it legitimate, to compare the intraday time like this?
I mean does python understand that i mean times? (or at least that these strings are "like" numbers in terms of size)

3 commentaires

Python n'a pas besoin de comprendre qu'ils sont temps, tant que la comparaison des chaînes produit le même résultat qu'une comparaison de temps. Pour une chaîne dans le format HH: mm: SS Ce sera vrai, sauf que l'heure de départ à minuit pourrait être 00:00:00 ou 24: 00:00 .


Python pas comprend que vous voulez dire que vous voulez dire, car ce que vous aviez fourni était une valeur str (ordinateurs ne fera jamais ce que vous voulez dire, cela fera exactement ce qu'il a été instructé) ; Si vous voulez vraiment faire face à un temps, convertissez la valeur en un type DateTime; Notez que 24:00:00 n'est pas considéré comme un temps valide - sans parler de celui-ci peut être considéré comme équivalent à 00:00:00 .


Cela fonctionne bien, mais pas parce que Python sait que vous comparez des temps. La seule chose qu'il sait, c'est que vous comparez cordes . Tant que vous avez des zéros de premier plan, cependant, la comparaison des chaînes fonctionne de la même manière dans ce contexte que si vous comparez des temps. Mais, .e.g., "09:00:00" <"5:00:00" est également vrai. Comme Strings "0" <"5".


3 Réponses :


1
votes

Premier

24 n'est pas une heure légitime, il devrait être "0-23" p>

second p>

dans votre formate, il est légitime. Je veux dire que votre Time Formate est "HH: MM: SS". Cela pourrait être comparable à la chaîne comme ce que vous avez fait. P>

troisième p>

J'ai une méthode courante pour comparer le temps. Il nécessite python-coudéttil code> package. P>

Installez le package par PIP INSTALL PYTHON-DATEUTILLE P>

ALORS P>

from dateutil.parser import parse
print(parse("00:00:00")<parse("23:00:00"))


0 commentaires

1
votes

Python ne comprend pas que ces chaînes représentent du temps. Cela ne comprend que ce qu'ils sont des chaînes. Python ne fait aucune sorte d'analyse de chaîne pour essayer d'interpréter ce que vous voulez dire lorsque vous créez des chaînes - cela serait incroyablement inefficace et inutile pour 99,9% des cas d'utilisation.

Cela étant dit, il y a des conversions intégrées que vous peut appeler pour convertir des chaînes à d'autres types. Un exemple simple est la conversion de la chaîne pour flotter. Dans ce cas, vous indiquez explicitement Python d'interpréter la chaîne d'une manière particulière, c'est pourquoi elle fonctionne: xxx

la raison pour laquelle vos travaux de comparaison de temps sont que Python comparera Cordes en regardant chaque caractère, à partir du début de la chaîne et en comparant les valeurs ASCII de ces caractères. Essentiellement, Python comparera les cordes par rapport à l'ordre alphabétique (plus précisément, sur la base de la valeur ASCII). Dans votre exemple, les premiers caractères qui seront comparés sont '0' et '2' . Caractère '2' a une valeur ASCII de 50, qui est plus gros que la valeur ASCII '0' de 48. À ce stade, Python peut déjà conclure que le 2e La chaîne est plus grande que la 1ère chaîne, il renvoie donc vrai . Si les deux personnages étaient identiques, il aurait continué à lire de gauche à droite jusqu'à ce qu'il puisse prendre une décision quant à la chaîne de «moins».

Voir le ASCII TABLE Pour plus d'informations sur les codes ASCII.


0 commentaires

1
votes

Vous comparez techniquement deux objets STR (chaîne / texte). Cela pourrait être valide si vous utilisez un format de 24 heures:

type("00:00:00") # str i.e. string, not time

"09:00:00"<"21:00:00" # True

"12:00:00 pm" < "11:00:00 pm" # False


0 commentaires