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 <[email protected]> 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 - [email protected]
To unsubscribe or change subscription options:
http://mail.python.org/mailman/listinfo/tutor