On 28-Aug-12 04:23, Dharmit Shah wrote:
Hello,

I am trying to do the following :

1) Ask user for the length of the word that he'd like to guess (for
hangman game).
2) Pick a random word from /usr/share/dict/words (which I understand
is not the best choice for hangman).
3) Call a function that would pick a random word to proceed further.

Below is the code for the part I described above :

I'm struggling to understand why you're using recursion here.
It serves no evident purpose for what you're doing, and given a large dictionary of words, could seriously tank the performance of the application, quite possibly run it out of resources and crash it altogether.

But since you're using recursion, note that when you make your recursive call, you're ignoring the return value from that call, so no returned value ever gets propagated out to the outer layers of recursion.

If the outermost layer took the recursion (length of the chosen word is wrong), it calls itself and then never takes the branch including the return statement at all. ("return word" is never executed in that case). This causes the function to just 'fall off' the end which implicitly returns None.


HTH


[code]

#!/bin/env python
import random

def pick_random(l, ln):           # picks a random word from the list
l of length ln
     global mystery
     word = random.choice(l)
     if word.__len__() != ln:
         pick_random(l, ln)        # recursion
     else:
         print "Should return %s" % word     # prints the chosen random
word correctly
         return word                                      # always
return None, why? :(

if __name__ == "__main__":
     ln = raw_input("How long word can you guess (number of alphabets) : ")
     ln = int(ln)
     l = []
     with open("/usr/share/dict/words", "r") as f:
         for i in f.readlines():
             i = i.split("\n")[0]
             if i.isalpha():
                 l.append(i)

     word = pick_random(l, ln)
     print word

[/code]

Sample output :

$ python hangman.py
How long word can you guess (number of alphabets) : 6
Should return inarch
None
$

The problem is that the last line "print word" always prints None. I
know I am doing something wrong in the recursion part of the function
"pick_random". Can someone please point what I am missing. Thank you!

Cheers,
Dharmit



--
Steve Willoughby / st...@alchemy.com
"A ship in harbor is safe, but that is not what ships are built for."
PGP Fingerprint 4615 3CCE 0F29 AE6C 8FF4 CA01 73FE 997A 765D 696C
_______________________________________________
Tutor maillist  -  Tutor@python.org
To unsubscribe or change subscription options:
http://mail.python.org/mailman/listinfo/tutor

Reply via email to