Re: Python @ Education: What are your problems?

From: Kirby Urner <urnerk@qwest.net> ... def readln(): # defined once return [eval(i) for i in raw_input().split()]
x,y = readln() # used elsewhere
is a quickie workaround.
Clever, and concise! Here's a more robust (albeit verbose) version that checks the number and types of the arguments: def readln(spec, prompt=""): types = { 'i' : int, 'f' : float, 's' : str } while 1: words = raw_input(prompt).split() if len(words) != len(spec): print 'You must input', len(spec), 'items, please try again' continue try: return [types[s](w) for s,w in zip(spec, words)] except KeyError: print 'Invalid type specifier passed to readln:', s print " You must pass in a string of i's, f's, or s's" return except ValueError, e: print 'Invalid input, please try again' print ' ', e
print readln('ifs', 'input (int float string): ') input (int float string): You must input 3 items, please try again input (int float string): a b c Invalid input, please try again invalid literal for int(): a input (int float string): 1 2 3 [1, 2.0, '3']
Or, if you only care about inputting numbers, you can use this simpler version: def readnumbers(num, prompt=""): while 1: words = raw_input(prompt).split() if len(words) != num: print 'You must input', num, 'numbers, please try again' continue try: return [float(w) for w in words] except ValueError, e: print 'Invalid input, please try again' print ' ', e
readnumbers(3, 'x y z? ') x y z? 1 2 You must input 3 numbers, please try again x y z? 1 2 z Invalid input, please try again invalid literal for float(): z x y z? 1 2 3 [1.0, 2.0, 3.0]
Brent
participants (1)
-
Burley, Brent