Comment vérifier la chaîne si flottant ou entier?

buf=[]
token=[]
def lex():
def read():

f=open('lex.txt','r')
data=f.readline()
data=data.split(' ')
return data
lex=read()
def operator(i):

op=['+','-','/','*','<','>','>=','<=']

if i in op:
buf.append(i)
token.append('RELOP')
return True
def error(i):

digit=[0,1,2,3,4,5,6,7,8,9,0]

try:

if i[0] in digit:
buf.append(i)
token.append('ERROR')
return True
except:
pass

def keyword(i):

keyword=['if','while','for']

if i in keyword:
buf.append(i)
x=i.upper()
token.append(x+'_TOKEN')
return True

def ident(i):

alph=['a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','q','r','s','t','u','v','w','x','y','z']

try:

if i[0] in alph:
buf.append(i)
token.append('ID')
return True

except:
pass


def floati(i):

try:
res = i.replace('.', '', 1).isdigit()
if res:
buf.append(i)
token.append('FLOAT')
return True

except:
pass



def integ(i):

try:
x=int(i)
buf.append(i)
token.append('INTEGER')
return True
except:
pass
count=0
for i in lex:

if keyword(i):

print(token[count])

continue

elif operator(i):

print(token[count])
continue
elif error(i):

print(token[count])
continue
elif floati(i):

print(token[count])
continue
elif integ(i):

print(token[count])
continue
elif ident(i):

print(token[count])
continue
else:

print("Zaaa anan xd")

count+1

lex()



J'essaie d'écrire un analyseur lexical en Python. Je veux vérifier une chaîne d'entrée d'un fichier pour un float ou un entier, mais quand j'utilise float()mon code, change le type de chaîne d'entier en float et retourne en float. Je ne veux pas vérifier la chaîne en utilisant float()ou int(). Je veux ajouter la chaîne à un tableau sans le changer.


Solution du problème

Un moyen simple de vérifier si une chaîne est int ou float :

def is_int(s):
try:
int(s)
return True
except ValueError:
return False

Puis:

>>> is_int('-73')
True
>>> is_int('2.3')
False

Mais notez que ce qui précède is_int()ne vérifie que int. Sinon, ce n'est pas forcément un float:

>>> is_int('foo')
False

Mais vous pouvez facilement dupliquer ce modèle pour float.

Commentaires

Posts les plus consultés de ce blog

Erreur Symfony : "Une exception a été levée lors du rendu d'un modèle"

Détecter les appuis sur les touches fléchées en JavaScript

Une chaîne vide donne "Des erreurs ont été détectées dans les arguments de la ligne de commande, veuillez vous assurer que tous les arguments sont correctement définis"