[Tutor] Problem with "input" in Python 3

Dave Angel davea at ieee.org
Mon Feb 15 14:20:35 CET 2010


Peter Anderson wrote:
> <div class="moz-text-flowed" style="font-family: -moz-fixed">Hi!
>
> I am trying to teach myself how to program in Python using Zelle's 
> "Python Programming: An Introduction to Computer Science" (a very good 
> text). At the same time I have decided to start with Python 3 (3.1.1). 
> That means that I have to convert Zelle's example code to Python 3 
> (which generally I cope with).
>
> I'm hoping that somebody can help with what's probably a very simple 
> problem. There is a quadratic equation example involving multiple user 
> inputs from the one "input" statement. The code works fine with Python 
> 2.5 but when I convert it to Python 3 I get error messages. The code 
> looks like:
>
> 05 import math
> 06
> 07 def main():
> 08 print("This program finds the real solutions to a quadratic\n")
> 09
> 10 a, b, c = input("Please enter the coefficients (a, b, c): ")
> 11
> 12 '''
> 13 a = int(input("Please enter the first coefficient: "))
> 14 b = int(input("Please enter the second coefficient: "))
> 15 c = int(input("Please enter the third coefficient: "))
> 16 '''
> 17
> 18 discrim = b * b - 4 * a * c
> 19 ...
>
> 25 main()
>
> Lines 08 to 12 are my Python 3 working solution but line 06 does not 
> work in Python 3. When it runs it produces:
>
> Please enter the coefficients (a, b, c): 1,2,3
> Traceback (most recent call last):
> File "C:\Program Files\Wing IDE 101 
> 3.2\src\debug\tserver\_sandbox.py", line 25, in <module>
> File "C:\Program Files\Wing IDE 101 
> 3.2\src\debug\tserver\_sandbox.py", line 10, in main
> builtins.ValueError: too many values to unpack
> >>>
>
> Clearly the problem lies in the input statement. If I comment out line 
> 10 and remove the comments at lines 12 and 16 then the program runs 
> perfectly. However, I feel this is a clumsy solution.
>
> Could somebody please guide me on the correct use of "input" for 
> multiple values.
>
> Regards,
> Peter
The input() function in Python3 produces a string, and does not evaluate 
it into integers, or into a tuple, or whatever.  See for yourself by trying

   print ( repr(input("prompt ")) )

on both systems.


You can subvert Python3's improvement by adding an eval to the return value.
   a, b, c = eval(input("Enter exactly three numbers, separated by commas"))

is roughly equivalent to Python 2.x  input expression.  (Python 3's 
input is equivalent to Python 2.x  raw_input)

DaveA


More information about the Tutor mailing list