[Tutor] string integers?
Brian van den Broek
brian.van.den.broek at gmail.com
Mon Feb 13 01:16:43 CET 2012
On 13 February 2012 01:34, William Stewart <williamjstewart at rogers.com> wrote:
>
> this is the code I have
>
> str1 = raw_input("Type in a String: ")
> str2 = raw_input("Type in a String: ")
> int1 = raw_input("Type in a integer variable: ")
> int2 = raw_input("Type in a integer variable: ")
> print str1 + str2 + int1 + int2
> import math
> int1 = int(raw_input(""))
> print str1,
> print str2,
> print int1, "*", int2
> print "="
> and it does not give me an error message when I run it, the program runs fine except its did not multiply the 2 integer variables i entered
>
> it looks like this
>
> Type in a String: hello
> Type in a String: hi
> Type in a integer variable: 4
> Type in a integer variable: 5
> hellohi45
>
> This part is exactly what I want it to look like
> except I want it to multply the 2 numbers I inputed (4 & 5 in this example)
>
Hi William,
That is a much better starting point from which to get help. It looks
to me as though you took the responses concerning form that I and
other gave you seriously; I'm glad. (I sympathize about the difficulty
to find time to ask well. It does, however, take less time in the long
run than asking several rounds of quick to compose questions.)
Steven D'Aprano has given you enough that you should be able to make
progress and ask again if needed. I did, however, want to point out
that in my first message to you, when I suggested a function for you
to run, it was with an eye to helping you to discover the problem.
Here's the function and the results of running it in idle:
IDLE 2.6.6
>>> def test():
data = raw_input("give me an integer")
print type(data)
print "a string" * "another"
>>> test()
give me an integer42
<type 'str'>
Traceback (most recent call last):
File "<pyshell#1>", line 1, in <module>
test()
File "<pyshell#0>", line 4, in test
print "a string" * "another"
TypeError: can't multiply sequence by non-int of type 'str'
>>>
(Here, 42 is my input.) You can see that the type of data (the value
returned by the raw_input call) is str---a string. The TypeError is
telling you that the code I gave tries to multiply by a string and
that caused a TypeError as multiplication isn't an operation defined
for strings as the right-hand multiplier. Steven's email shows you how
to surmount that problem; you must use int() to turn the returned
value of raw_input into an integer. Compare:
>>> def test2():
data = int(raw_input("give me an integer"))
print type(data)
print data * data
>>> test2()
give me an integer4
<type 'int'>
16
of course, there are still things that can go wrong:
>>> test2()
give me an integer3.1415
Traceback (most recent call last):
File "<pyshell#7>", line 1, in <module>
test2()
File "<pyshell#5>", line 2, in test2
data = int(raw_input("give me an integer"))
ValueError: invalid literal for int() with base 10: '3.1415'
>>> test2()
give me an integerFourtyTwo
Traceback (most recent call last):
File "<pyshell#8>", line 1, in <module>
test2()
File "<pyshell#5>", line 2, in test2
data = int(raw_input("give me an integer"))
ValueError: invalid literal for int() with base 10: 'FourtyTwo'
>>>
In both cases, I entered some string that int() cannot turn into an integer.
If you get the basic idea working for the case where the user enters
sane values, we can talk about how to deal with such cases if need be.
Best,
Brian vdB
More information about the Tutor
mailing list