[Tutor] Hi everyone
Lie Ryan
lie.1296 at gmail.com
Thu May 21 08:16:32 CEST 2009
Doug Reid wrote:
> Now here is the code I'm having trouble following:
>
> while word:
> position = random.randrange(len(word))
> jumble += word[position]
> word = word[:position] + word[(position + 1):]
>
> position = random.randrange(len(word)). This will create a starting
> point for the program to pick a letter out of a word at random using the
> length of the word as a range I think. Like if the word is 'python' and
> since it has 6 letters, random.randrange(len(word)) will pick a random
> starting point such as the letter 'y' for example. It's gonna be inside
> a while loop, so the next time it runs, 'python' will be 'pthon' and the
> random range will be 5 letters and on down till there is no more
> letters, is this right?
`position` is an integer. It is the index of the letter we want to put
into `jumble`. The first line generates a random index, the second line
copies the letter and append it to `jumble`, and the third line removes
that letter from `word`.
> Ok, so everyone of the letters that was 'extracted' from the word
> 'python' will be put into the variable 'jumble' that was defined as empty.
>
> This is the part that troubles me:
>
> word = word[:position] + word[(position + 1):]
How do we remove a single letter? In python, string is immutable; we
must create a new string that has the required property (i.e. letter in
`position` removed).
Rather than removing, we copied the part of string before `position`
(word[:position]) and after `position` (word[position+1:]) and
concatenating them together to become our new `word`.
How does the slicing works?
The standard model for "slicing and indexing" in python is like this:
-6 -5 -4 -3 -2 -1
+---+---+---+---+---+---+
| p | y | t | h | o | n |
+---+---+---+---+---+---+
0 1 2 3 4 5 6
Let's say `position` is 3 (i.e. the letter "h").
word[:3] is:
-6 -5 -4 -3 -2 -1
+---+---+---+---+---+---+
| p | y | t | h | o | n |
+---+---+---+---+---+---+
0 1 2 3 4 5 6
|___________|
word[0:3]
which is "pyt"
while
word[3+1:] -> word[4:] is:
-6 -5 -4 -3 -2 -1
+---+---+---+---+---+---+
| p | y | t | h | o | n |
+---+---+---+---+---+---+
0 1 2 3 4 5 6
|_______|
word[4:6]
which is "on"
concatenating "pyt" + "on", we get "pyton" (i.e. "h" removed)
An extended version of the line that may be more easily digestible:
letters_before_position = word[:position]
letters_after_position = word[position+1:]
word = letters_before_position + letters_after_position
More information about the Tutor
mailing list