[Tutor] while loop only executes once
Lloyd Hugh Allen
lha2@columbia.edu
Wed, 19 Dec 2001 05:43:49 -0500
Brett Kelly wrote:
>
> ok, here's my loop. it only goes through once and exits.
> (words is a dictionary with each letter of the alphabet corresponding to a
> different word)
>
> name = raw_input("Please enter your name: ")
> name.lower()
>
> for i in range(0, len(name)):
> letter = name[i]
>
> while len(name) > 0:
> print words[letter]
> name[i] = name[1:]
>
> i can't figure this out!!!
>
> please help, thanks!
>
> Brett
>
> --
> Sent through GMX FreeMail - http://www.gmx.net
>
> _______________________________________________
> Tutor maillist - Tutor@python.org
> http://mail.python.org/mailman/listinfo/tutor
*name is not being changed within the while loop. If you want it to be,
indent name[i]=name[1:]
*except that name is currently a string. Strings don't like it when you
assign a slice to a character in the string (or when you assign anything
to a character in the string).
Is this what you want? I don't know what kind of output you are looking
for, and couldn't figure out what the for loop was supposed to do.
----begin code below this line-----
words = {'a':'foo', 'b':'foo2', 'c':'foo3'}
name = raw_input("Please enter your name: ")
name.lower()
while len(name) > 0:
print words[name[0]]
name = name[1:]
----end code above this line------
----begin output------
Please enter your name: abc
foo
foo2
foo3
----end output--------
I have a feeling that your troubles come from using two separated loops
when one will do, or from not nesting your loops if you want them to
interact with each other. A for loop is probably a better choice for the
above output, along the lines of
for letter in name:
print words[letter]
(which is probably easier to understand than the double-indexed stuff in
the while loop above).