On Mar 3, 2014, at 3:27 AM, spir <denis.s...@gmail.com> wrote:
> 
> There are 2 user guesses here, and only 1 variable, thus 1 name. The name 
> should say what (idea) the variable represents in the program; this should be 
> said by the name's *meaning*. It is one of the greatest difficulties in 
> programming. How would you define what these variables represent, using 
> everyday language? My own definitions would lead me to choose the following 
> variable names:
>     guess_text   = raw_input(promt)
>     guess_number = int(user_guess)
>     return guess_number
> Note: it is especially obviuos that these are 2 separate numbers, since they 
> do not even are of the same type (a piece of text, or "string", vs a number, 
> here an "int").
> 
> Good naming is very, very hard; differences of naming can make some piece of 
> program nearly trivial or instead nearly impossible to understand; often bad 
> naming is worse than hypothetical randomly chosen names, because bad naming 
> *misleads* your thinking.
> 
> Changing the value of a local variable is always, or nearly, a sign that 
> there are here 2 ideas which should be represented by 2 variables with 2 
> names. Example of 2 programming styles (note the difference in ease of 
> understanding, even if you don't know the python features used here):
> 
> def get_data (data):
>    data = File(data)          # (a file)
>    data = data.read()         # (a piece of text)
>    data = data.split("")      # (a list of words)
>    return data
> ...
> data = get_data("data.text")
> 
> def data_words (file_name):
>    data_file = File(file_name)                # (a file)
>    text = data_file.read()            # (a piece of text)
>    words = text.split(" ")            # (a list of words)
>    return words
> ...
> words = data_words("data.text")
> 
> (A special case is loop variables, but even then you only write the 
> assignment once, the value chages across multiple passes on the same code. 
> The only real exception is accumulators, like for computing a sum, which need 
> to be first initialised to a start value, often 0.)
> 
>> def print_hints(secrets, guess):
>>     secret_number = secret
>>     guess = guess
>>     if guess < 0 or user_guess> 101:
>>         print "Out of range!"
> 
> Parameters are input variables. Once they are given execution values by a 
> call like
>    print_hints(input_value1, input_value2)
> 
> these variables exist _inside_ the function body (each with a name and a 
> value). As if functions were defined like:
>    def print_hints:           # note: no param
>        secret = input_value1
>        guess  = input_value2
>        ... use these variables ...
> This is more or less what the language does for you. This is the whole point 
> of defining parameters, in fact. So, _you_ do not need to _rebind_ parameters 
> to local variables; they already are local variables.
> 
> In addition, you are not consistent with variable _names_, evendently, so 
> your programs have no chance to work. This is an annoying, but necessary part 
> of programming. But the language will always tell about such errors, at once, 
> *if and only if* the wrong name does *not* otherwise exist. --> pay attention!
> 
>> def main():
>>     print_description()
>>     secret = randrange(1,101)
>>     current_guess = get_guess(1)
>>     if current_guess != secret:
>>         print_hints(secret_number, guess)
>>         current_guess = get_guess(2)
> 
> * 'secret_number' appears from nowhere: pay attention!
> * To be more coherent checking if the guess is right or wrong (or too high or 
> too low) should be done in function print_hints as well. This function 
> _evaluates_ the guess (maybe it should be renamed).
> 
>>     if secret == current_guess:
>>         print "Congratulations, you win!"
>>     else:
>>         print "Please play again"
>>     print "The secret number was", secret
> 
> These are (also) hints to the player, actually, aren't they?

***Wow, thanks a lot Denis!!  Although I didn’t get everything you said I 
definitely understand a lot more!****

I’ve made some changes and have a couple questions, I’ll speak in between the 
code.  Thanks again everyone, especially for your patients, I know I’ve made 
several mistakes and I don’t know anything about programming and even less 
about these forums.  I apologize about that and again appreciate your 
patients!!!


from random import randrange
randrange(1, 101)
from random import seed
seed(129)
def print_description():
    print """Welcome to Guess the Number.
    I have selected a secret number in the range 1 ... 100.
    You must guess the number within 10 tries.
    I will tell you if you are high or low, and
    I will tell you if you are hot or cold.\n"""
   
So, this is what I gather from the function below.  I’m basically taking the 
parameter guess_number and making it a str with prompt, then using the variable 
guess_text and turning the prompt into an int?  and returning the original 
value the user inputed?  

        def get_guess(guess_number):
                prompt = "(" + str(guess_number) +") Please enter a guess:"
                guess_text = raw_input(prompt)
                guess_number = int(guess_text)
                return guess_number

I’m a little confused about the parameter guess below and how I’m able to use 
it with the conditional statement for when it’s out of range?  Is it because 
when I call the function print_hints(secret, current_guess) I’m essentially 
defining it because guess_number was turned into current_guess when I call it 
equal to get_guess(1)??  I hope I’m not just confusing you guys.  I’m just 
trying to make sense of everything.  I feel like it would be a lot clearer if 
we were allowed to use global variables.  Anyways…

        def print_hints(secret, guess):
                if guess < 1 or guess > 101:
                        print
                        print "Out of range!"
                        print


def main():
    print_description()
    secret = randrange(1,101)
    current_guess = get_guess(1)
    if current_guess != secret:
        print "please play again!"
        print_hints(secret, current_guess)
        current_guess = get_guess(2)
    if current_guess != secret:
        print "please play again!"
        print_hints(secret, current_guess)
        current_guess = get_guess(3)
    if current_guess != secret:
        print "please play again!"
        print_hints(secret, current_guess)
        current_guess = get_guess(4)
    if current_guess != secret:
        print "please play again!"
        print_hints(secret, current_guess)
        current_guess = get_guess(5)
    if current_guess != secret:
        print "please play again!"
        print_hints(secret, current_guess)
        current_guess = get_guess(6)
    if current_guess != secret:
        print "please play again!"
        print_hints(secret, current_guess)
        current_guess = get_guess(7)
    if current_guess != secret:
        print "please play again!"
        print_hints(secret, current_guess)
        current_guess = get_guess(8)
    if current_guess != secret:
        print "please play again!"
        print_hints(secret, current_guess)
        current_guess = get_guess(9)
    if current_guess != secret:
        print "please play again!"
        print_hints(secret, current_guess)
        current_guess = get_guess(10)
        
    
    if current_guess == secret:
        print "Congratulations, you win!"
    if secret != current_guess:
        print "Please play again"
    print "The secret number was:", secret

main()

_______________________________________________
Tutor maillist  -  Tutor@python.org
To unsubscribe or change subscription options:
https://mail.python.org/mailman/listinfo/tutor

Reply via email to