#!/usr/bin/env python3
#-*- coding:utf-8 -*-
# scanf-like input conversion
import re
scanf= lambda inpstr,funcs: [ func(e) if func else e for e,func in zip(inpstr.split(),funcs) ]
rscanf=lambda inpstr,funcs,sep=None: [ func(e) if func else e for e,func in zip(inpstr.split() if not sep else re.match(sep,inpstr).groups() if len(sep)>1 else inpstr.split(sep),funcs) ]
if __name__=="__main__":
text1= "42 3.14 1e6 karakterlánc"
ii,f,ff,s= scanf(text1,(int,float,float,None))
print("I.",ii,f,ff,s)
#------------------------------------------------------
print( "II.",rscanf(text1,(int,float,float,None)) )
#------------------------------------------------------
text2= " 42 töltelék1 3.14 töltelék2 karakterlánc 5.2 senkit sem érdekel"
regex= r"\s*(\d+)\s+(?:\w+\s+)?(\d+)\.(\d+)\s+(?:\w+\s+)?(\w+)\s+(\d+\.\d+)"
print( "III.",rscanf(text2,(int,int,int,None,float),regex) )
#i,whole,fraction,s,f= rscanf(text2,(int,int,int,None,float),regex)
#------------------------------------------------------
text3= "136;137;138.99;hup;hupi;1e3"
print( "IV.",rscanf(text3,(int,int,float,None,None,float),";") )
#i1,i2,f1,s1,s2,f2= rscanf(text3,(int,int,float,None,None,float),";")
Kimenetek:
I. 42 3.14 1000000.0 karakterlánc
II. [42, 3.14, 1000000.0, 'karakterlánc']
III. [42, 3, 14, 'karakterlánc', 5.2]
IV. [136, 137, 138.99, 'hup', 'hupi', 1000.0]
- kantal blogja
- A hozzászóláshoz be kell jelentkezni