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
Enregistrer un commentaire