force sequenz with only one item?
Gordon McMillan
gmcm at hypernet.com
Sat Jun 12 20:45:43 EDT 1999
Holger Jannsen asks:
>
> I think it's easy to solve, but I couldn't get it right now.
> Take a look at the command-line source below:
>
> >>> A = 0
> >>> B = 1
> >>> seq=raw_input("?")
> ?A,B
> >>> print seq
> A,B
> >>> print eval(seq)
> (0, 1)
> >>> seq=raw_input("?")
> ?A
> >>> print eval(seq)
> 0
> >>> A in seq
> Traceback (innermost last)
:...
> TypeError: 'in' or 'not in' needs sequence right argument
> >>>
The reason "A,B" gets evaluated to the sequence (0,1) is because of
the comma. "(A,)" would get evaluated to (0,), while "[A]" would
evaluate to [0]. If you want to always end up with sequences, you
should probably eval it and test it:
if type(evaledinput) not in (type(()), type([])):
evaledinput = (evaledinput,)
Single element tuples need the extra comma to distinguish them from
a simple grouping, as in 4 * ( 3 + 7 ). It would cause great
wailing and gnashing of teeth if it yeilded (10, 10, 10, 10).
even-worse-than-while-1-ly y'rs
- Gordon
More information about the Python-list
mailing list