Dear Dave,
I am using python 2.
I am still confused as what return does. What does it mean if a function 
returns True to the caller? What is the caller? 
Your code worked for returning a list of 1000 items of odd numbers, so I then 
tried writing a code to replay isodd to give True or False for isprime. 
However, 
> def isodd(candidate):
>    if candidate%2 ==0:
>        return False
>    else:
>        return True
The meaning of this I am still confused about. What does it mean if the value 
is returned as false if it has 0 remainder, what does it mean if it is returned 
as true? Is this like a dictionary with keys and values? 
Also, here is my new code, which still does not work. I have no idea why not, 
and am getting very frustrated by the fact that making a program that 
determines if a number is prime or not is so hard for me. I would appreciate 
any assistance, and a verbal walk through of how to logically determine if a 
number is prime. 

def isprime(x):
    test=2
    numberinquestion = x
    while test < numberinquestion:
        if numberinquestion % test == 0:
            test += 1
            return False
        elif numberinquestion / test == int:
            test += 1
            return False
    if test == numberinquestion:
        return True
            
def counting_primes():
    prime = 2
    primelist=[]
    while len(primelist) < 1000:
        if isprime(prime):
            primelist.append(prime)
        prime += 1
    return primelist
Sincerely,
Dan
On May 12, 2013, at 6:43 AM, Dave Angel <da...@davea.name> wrote:

> On 05/11/2013 09:58 PM, Daniel Magruder wrote:
> 
> Please respond to the list, not the individual.  Otherwise you're robbing 
> yourself and others of the possibility of learning from and helping multiple 
> people.  I don't mind if you ALSO reply to me (which is what reply-all does 
> by default), but many people do object.  In Thunderbird, you normally just do 
> Reply-list, and it does the right thing.  But with other email programs, you 
> might do reply-all, and remove whichever recipients you don't need.
> 
>> Dear Dave,
>> I can't tell you how much I appreciate your assistance, however as a novice 
>> I doubt my ability to crawl. I sincerely envy your depth of understanding 
>> about this and in trying to learning would really benefit if you could 
>> please expound on a few notions.
>> Why must I top-level call? What is that actually? Several of the sources I 
>> have seen like learnpython.org suggest that def function(): is sufficient...
> 
> A function is defined by a def, but a program that never calls any of them 
> will do nothing at all (except look for syntax errors and the like).  There 
> are probably tens of thousands of defined functions in the library, but 
> running python will only execute the ones you call.
> 
> Typically at the bottom of every script there needs to be at least one 
> function call that gets things started.  (Unless the script is so trivial 
> that it's written without using any functions).  But in either case, some 
> top-level code is needed.
> 
> That top-level code can be as simple as a single call, or it might define a 
> few variables, and then make the call(s).
> 
>> I thought I had to define prime as f(0) so that it would be a float, not an 
>> integer division. Am I wrong? I am so utterly confused.
> 
> I'm afraid you're wrong in a couple of points.  There's no such function as 
> f() in the standard library.  If you wanted to define a literal float, you 
> could either use 0.0, or use float(0).  But you do not want a float there, 
> everything can be done with ints.
> 
>> In many sample codes I have seen num or int seem to be short hand for 
>> anything that is a number, because I though I was dividing and would receive 
>> a float remainder for non-prime numbers, I wan't to use that as a test.
> 
> int and float are types (and act like functions), and if you needed to check 
> the type of an object, you'd use  isinstance(myvar, int) or isinstance(myvar, 
> float).  You can't just do a comparison with int.  But dividing two ints will 
> give an int in Python 2.x and will give a float in Python 3.x.   And that's 
> regardless of whether it comes out even or not.  Which version of Python are 
> you using?
> 
> Fortunately, there's a much better way of telling if an int can be divided by 
> another int:  The modulo operator, represented by a "%" symbol.
> 
>    prime%n   will give the remainder, and if it's zero, you know that prime 
> is evenly divisible by n  (and therefore isn't prime).
> 
> 
>> For your suggestion:
>>> def testprime(candidate)
>>>    check all ints between 2 and candidate, and return true if any of them 
>>> divide the candidate evenly
>> I don't mean to be so dependent, but how would I do this? Also what is the 
>> difference between return and print?
>>>    Otherwise return false
>>> 
> 
> The return statement is the way a function returns a value to its caller.  
> Let's suppose you wanted a function that returned true if its int argument 
> was odd.  You could do it like this:
> 
> def isodd(candidate):
>    if candidate%2 ==0:
>        return False
>    else:
>        return True
> 
> Now, the body of that function could be done in one line, but I wanted to 
> illustrate the returning of useful values, and also the possibility that the 
> return might not be at the end, and that there might be  more than one place 
> the function returns.
> 
> Why not get the other function to call this one temporarily, and see if you 
> can make the program find the first 1000 odd numbers instead.  Then you can 
> come back to the testprime() function and see if you can create one that 
> returns True for primes, and False for anything else.  Clearly that function 
> will need a loop.
> 
>>> def counting_primes()
>>>    build a list of primes, where a number is put in the list if testprime() 
>>> confirms that it is prime.
>> Again, how would I do this, so if I had something that told me a number was 
>> prime, how would I take that prime and put it in a list if the function is 
>> on loop?
>>>    return the list once it's big enough
> 
> You're already doing that in the code you showed.  You initialized the 
> primelist, then started a while loop.  The difference I'm suggesting is that 
> instead of dealing with x in this function, you defer that to the testprime() 
> function.  So your loop would call testprime() and conditionally append the 
> value prime to the primelist.
> 
> def counting_primes():
>    primelist=[]
>    prime = 2
>    while len(primelist) < 1000:
>        if isodd(prime):
>             primelist.append(prime)
>        prime += 1
>    return primelist
> 
>> Despite going to many sources I can not seem to find a single source that 
>> adequately explains Python 100% without any technical jargon or assumptions 
>> of prior knowledge. What I mean by this, is that I now have the gist of the 
>> utmost basics, but I would say my understanding is befuddled. Furthermore if 
>> I were to attempt to write code (such as this exercise) I am completely 
>> lost. What do you recommend for a good source to learn Python? I have tried 
>> MIT open course ware, but again even their intro explains the obvious, but 
>> not how to use it collectively.
>> Sincerely,
>> Dan
>> 
>> 
> 
> With no experience in programming other languages, you'd need a different 
> kind of tutorial than I sought when I was learning Python. And you absolutely 
> need to match your tutorial against the version of Python you're running on 
> your machine.  2.x and 3.x aren't VERY different, but there were enough 
> changes that you don't want to be dealing with that while learning initially.
> 
> Anybody else want to recommend a tutorial for someone who has no programming 
> experience in other languages?
> 
> --
> DaveA
> 

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

Reply via email to