[Tutor] Input
Tiger12506
keridee at jayco.net
Wed Jan 16 00:04:27 CET 2008
Try regular expressions in the re module. This should make this code below
much much simpler. Downside is you have to learn a slightly different
syntax. Upside is - regular expressions are very powerful.
> Last week someone had an issue with raw_input() and how to get input for
> a number. So I remembered my CP/M times and got to think of a little
> function I had there. The function is lost and my time is scarce but I
> made a little effort and here you have the results. It has loads of room
> for improvement and probably a few bugs but it's a starting point, and
> it should guarantee that you get the input you need.
> You just define your mask and the functions checks the input
> accordingly, it returns a string.
> You might improve it by displaying the mask, e.g. for mask = '9999.99'
> you might see in the screen ____.__ or for mask = '999-AAA::9999' you'd
> see ___-___::___ so the user will know the format of what's expected of
> him, also a beep on incorrect entry might prove nice.
>
> HTH
>
> -----------------------------------------------------------------------
> import msvcrt
>
> _validChars = {
> 'X' :
> 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890'
> , '9' : '1234567890'
> , '-' : '-1234567890'
> , 'A' :
> 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
> , '!' : 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'}
> _validKeys = _validChars.keys()
>
> def maskInput(mask, separators = True) :
> lmask = list(mask)
> lmask.reverse()
> usedMask = []
> retInput = ''
> c = ''
> maskChar = lmask.pop()
> try :
> while maskChar not in _validKeys :
> if separators :
> retInput += maskChar
> msvcrt.putch(maskChar)
> maskChar = lmask.pop()
> except IndexError : pass
>
> c = msvcrt.getch()
> while c != chr(13) :
> if maskChar and maskChar not in _validKeys and c in
> _validChars[lmask[-1]] :
> if separators :
> retInput += maskChar
> msvcrt.putch(maskChar)
> usedMask.append(maskChar)
> maskChar = lmask.pop()
> if usedMask and c == '\b' :
> try :
> if maskChar :
> lmask.append(maskChar)
> maskChar = usedMask.pop()
> retInput = retInput[:-1]
> msvcrt.putch(c)
> msvcrt.putch(' ')
> msvcrt.putch(c)
> while usedMask[-1] not in _validKeys :
> if maskChar :
> lmask.append(maskChar)
> maskChar = usedMask.pop()
> if separators :
> retInput = retInput[:-1]
> msvcrt.putch(c)
> msvcrt.putch(' ')
> msvcrt.putch(c)
> except IndexError : pass
> elif maskChar and c in _validChars[maskChar] :
> retInput += c
> msvcrt.putch(c)
> try :
> usedMask.append(maskChar)
> maskChar = lmask.pop()
> # while maskChar not in _validKeys :
> except IndexError :
> maskChar = ''
> c = msvcrt.getch()
> return retInput
>
> if __name__ == '__main__' :
> invar = maskInput('-9999.99')
> print
> print invar
>
> ------------------------------------------------------------------------
> _______________________________________________
> Tutor maillist - Tutor at python.org
> http://mail.python.org/mailman/listinfo/tutor
>
More information about the Tutor
mailing list