pdf to image converter in c# : Add password to pdf file with reader control software platform web page windows wpf web browser HowToThinkLikeAComputerScientist_LearningWithPython39-part2027

6. Fruitful functions — How to Think Like a Computer Scientist: Learning with Python 3
http://openbookproject.net/thinkcs/python/english3e/fruitful_functions.html[1/4/2012 9:37:16 PM]
Boolean functions are often used in conditional statements:
It might be tempting to write something like:
but the extra comparison is unnecessary.
6.6. Programming with style
Readability is very important to programmers, since in practice programs are read and modified far
more often then they are written. All the code examples in this book will be consistent with the
Python Enhancement Proposal 8
(
PEP 8), a style guide developed by the Python community.
We’ll have more to say about style as our programs become more complex, but a few pointers will be
helpful already:
use 4 spaces for indentation
imports should go at the top of the file
separate function definitions with two blank lines
keep function definitions together
keep top level statements, including function calls, together at the bottom of the program
6.7. Unit testing
It is a common best practice in software development these days to include automatic unit testing of
source code. Unit testing provides a way to automatically verify that individual pieces of code, such as
functions, are working properly. This makes it possible to change the implementation of a function at
a later time and quickly test that it still does what it was intended to do.
Unit testing also forces the programmer to think about the different cases that the function needs to
handle. You also only have to type the tests once into the script, rather than having to keep entering
the same test data over and over as you develop your code.
Extra code in your program which is there because it makes debugging or testing easier is called
scaffolding.
A collection of tests for some code is called its test suite.
There are a few different preferred ways to do unit testing in Python — but at this stage we’re going to
>>> is_divisible(64)
False
>>> is_divisible(63)
True
1
2
3
4
if is_divisible(x, y):
... # do something ...
else:
... # do something else ...
1
if is_divisible(x, y) == True:
Add password to pdf file with reader - C# PDF Password Library: add, remove, edit PDF file password in C#.net, ASP.NET, MVC, WinForms, WPF
Help to Improve the Security of Your PDF Document by Setting Password
change password on pdf; convert protected pdf to word online
Add password to pdf file with reader - VB.NET PDF Password Library: add, remove, edit PDF file password in vb.net, ASP.NET, MVC, WinForms, WPF
Help to Improve the Security of Your PDF Document by Setting Password
pdf owner password; break password pdf
6. Fruitful functions — How to Think Like a Computer Scientist: Learning with Python 3
http://openbookproject.net/thinkcs/python/english3e/fruitful_functions.html[1/4/2012 9:37:16 PM]
ignore what the Python community usually does, and we’re going to start with two functions that we’ll
write ourselves. We’ll use these for writing our unit tests.
Let’s start with the 
absolute_value function that we wrote earlier in this chapter. Recall that we wrote a
few different versions, the last of which was incorrect, and had a bug. Would tests have caught this
bug?
First we plan our tests. We’d like to know if the function returns the correct value when its argument
is negative, or when its argument is positive, or when its argument is zero. When planning your tests,
you’ll always want to think carefully about the “edge” cases — here, an argument of 0 to
absolute_value is on the edge of where the function behaviour changes, and as we saw at the
beginning of the chapter, it is an easy spot for the programmer to make a mistake! So it is a good
case to include in our test suite.
We’re going to write a helper function for checking the results of one test. It takes two arguments —
the actual value that was returned from the computation, and the value we expected to get. It
compares these, and will either print a message telling us that the test passed, or it will print a
message to inform us that the test failed. The first two lines of the body (after the function’s
docstring) can be copied to your own code as they are here: they import a module called 
sys, and
extract the caller’s line number from the stack frame. This allows us to print the line number of the
test, which will help when we want to fix any tests that fail.
There is also some slightly tricky string formatting using the 
format method which we will gloss over
for the moment, and cover in detail in a future chapter. But with this function written, we can proceed
to construct our test suite:
Here you’ll see that we’ve constructed five tests in our test suite. We could run this against the first or
second versions (the correct versions) of 
absolute_value, and we’d get output similar to the following:
1
2
3
4
5
6
7
8
9
10
11
12
def test(actual, expected):
""" Compare the actual to the expected value,
and print a suitable message.
"""
import sys
linenum = sys._getframe(1).f_lineno   # get the caller's line number.
if (expected == actual):
msg = "Test on line {0} passed.".format(linenum)
else:
msg = ("Test on line {0} failed. Expected '{1}', but got '{2}'."
. format(linenum, expected, actual))
print(msg)
1
2
3
4
5
6
7
8
9
10
def test_suite():
""" Run the suite of tests for code in this module (this file).
"""
test(absolute_value(17), 17)
test(absolute_value(-17), 17)
test(absolute_value(0), 0)
test(absolute_value(3.14), 3.14)
test(absolute_value(-3.14), 3.14)
test_suite()        # and here is the call to run the tests
C# PDF insert image Library: insert images into PDF in C#.net, ASP
position and save existing PDF file or output a new PDF file. Insert images into PDF form field. How to insert and add image, picture, digital photo, scanned
pdf file password; open password protected pdf
C# PDF File & Page Process Library SDK for C#.net, ASP.NET, MVC
VB.NET File: Merge PDF; VB.NET File: Split PDF; VB Write: Add Image to PDF; VB.NET Protect: Add Password to PDF; VB.NET Annotate: PDF Markup & Drawing. XDoc.Word
add password to pdf file with reader; pdf password unlock
6. Fruitful functions — How to Think Like a Computer Scientist: Learning with Python 3
http://openbookproject.net/thinkcs/python/english3e/fruitful_functions.html[1/4/2012 9:37:16 PM]
But let’s say you change the function to an incorrect version like this:
Can you find at least two mistakes in this code? Running our test suite we get:
These are three examples of 
failing tests
.
6.8. Glossary
boolean function
A function that returns a boolean value. The only possible values of the 
bool type are False and
True.
chatterbox function
A function which interacts with the user (using 
input or 
print) when it should not. Silent functions
that just convert their input arguments into their output results are usually the most useful ones.
composition (of functions)
Calling one function from within the body of another, or using the return value of one function as
an argument to the call of another.
dead code
Part of a program that can never be executed, often because it appears after a 
return statement.
fruitful function
A function that yields a return value instead of None.
incremental development
A program development plan intended to simplify debugging by adding and testing only a small
amount of code at a time.
None
A special Python value. One use in Python is that it is returned by functions that do not execute a
return statement with a return argument.
return value
Test on line 24 passed.
Test on line 25 passed.
Test on line 26 passed.
Test on line 27 passed.
Test on line 28 passed.
1
2
3
4
5
6
def absolute_value(n):   # Buggy version
""" Compute the absolute value of n """
if n < 0:
return 1
elif n > 0:
return n
Test on line 24 passed.
Test on line 25 failed. Expected '17', but got '1'.
Test on line 26 failed. Expected '0', but got 'None'.
Test on line 27 passed.
Test on line 28 failed. Expected '3.14', but got '1'.
VB.NET PDF File Compress Library: Compress reduce PDF size in vb.
Also able to uncompress PDF file in VB.NET programs. Offer flexible and royalty-free developing library license for VB.NET programmers to compress PDF file.
adding a password to a pdf file; advanced pdf password remover
VB.NET PDF insert image library: insert images into PDF in vb.net
using RasterEdge.XDoc.PDF; Have a try with this sample VB.NET code to add an image to the first page of PDF file. ' Open a document.
add password to pdf document; pdf document password
6. Fruitful functions — How to Think Like a Computer Scientist: Learning with Python 3
http://openbookproject.net/thinkcs/python/english3e/fruitful_functions.html[1/4/2012 9:37:16 PM]
The value provided as the result of a function call.
scaffolding
Code that is used during program development to assist with development and debugging. The
unit test code that we added in this chapter are examples of scaffolding.
temporary variable
A variable used to store an intermediate value in a complex calculation.
test suite
A collection of tests for some code you have written.
unit testing
An automatic procedure used to validate that individual units of code are working properly.
6.9. Exercises
All of the exercises below should be added to a single file. In that file, you should also add the 
test
and 
test_suite scaffolding functions shown above, and then, as you work through the exercises, add
the new tests to your test suite. (If you open the online version of the textbook, you can easily cut and
paste the tests and the fragments of code into your Python editor.)
After completing each exercise, confirm that all the tests pass.
1.  The four compass points can be abbreviated by single-letter strings as “N”, “E”, “S”, and “W”.
Write a function 
turn_clockwise that takes one of these four compass points as its parameter,
and returns the next compass point in the clockwise direction. Here are some tests that should
pass:
You might ask “What if the argument to the function is some other value?” For all other
cases, the function should return the value None:
2.  Write a function 
day_name that converts an integer number 0 to 6 into the name of a day. Assume
day 0 is “Sunday”. Once again, return None if the arguments to the function are not valid. Here
are some tests that should pass:
3.  Write the inverse function 
day_num which is given a day name, and returns its number:
Once again, if this function is given an invalid argument, it should return None:
test(turn_clockwise("N"), "E")
test(turn_clockwise("W"), "N")
test(turn_clockwise(42), None)
test(turn_clockwise("rubbish"), None)
test(day_name(3), "Wednesday")
test(day_name(6), "Saturday")
test(day_name(42), None)
test(day_num("Friday"), 5)
test(day_num("Sunday"), 0)
test(day_num(day_name(3)), 3)
test(day_name(day_num("Thursday")), "Thursday")
C# PDF File Compress Library: Compress reduce PDF size in C#.net
All object data. File attachment. Flatten visible layers. C#.NET DLLs: Compress PDF Document. Add necessary references: RasterEdge.Imaging.Basic.dll.
pdf password unlock; create password protected pdf reader
VB.NET PDF File Merge Library: Merge, append PDF files in vb.net
by directly tagging the second PDF file to the target one, this PDF file merge function VB.NET Project: DLLs for Merging PDF Documents. Add necessary references
pdf user password; acrobat password protect pdf
6. Fruitful functions — How to Think Like a Computer Scientist: Learning with Python 3
http://openbookproject.net/thinkcs/python/english3e/fruitful_functions.html[1/4/2012 9:37:16 PM]
4.  Write a function that helps answer questions like ‘“Today is Wednesday. I leave on holiday in 19
days time. What day will that be?”’ So the function must take a day name and a 
delta argument
— the number of days to add — and should return the resulting day name:
Hint: use the first two functions written above to help you write this one.
5.  Can your 
day_add function already work with negative deltas? For example, -1 would be
yesterday, or -7 would be a week ago:
If your function already works, explain why. If it does not work, make it work.
Hint: Play with some cases of using the modulus function % (introduced at the beginning of the
previous chapter). Specifically, explore what happens to 
x % 7 when x is negative.
6.  Write a function 
days_in_month which takes the name of a month, and returns the number of
days in the month. Ignore leap years:
If the function is given invalid arguments, it should return None.
7.  Write a function 
to_secs that converts hours, minutes and seconds to a total number of seconds.
Here are some tests that should pass:
8.  Extend 
to_secs so that it can cope with real values as inputs. It should always return an integer
number of seconds (truncated towards zero):
9.  Write three functions that are the “inverses” of 
to_secs:
1. 
hours_in returns the whole integer number of hours represented by a total number of
seconds.
2. 
minutes_in returns the whole integer number of left over minutes in a total number of
seconds, once the hours have been taken out.
3. 
seconds_in returns the left over seconds represented by a total number of seconds.
You may assume that the total number of seconds passed to these functions is an integer. Here
test(day_num("Halloween"), None);
test(day_add("Monday"4),  "Friday")
test(day_add("Tuesday"0), "Tuesday")
test(day_add("Tuesday"14), "Tuesday")
test(day_add("Sunday"100), "Tuesday")
test(day_add("Sunday"-1), "Saturday")
test(day_add("Sunday"-7), "Sunday")
test(day_add("Tuesday"-100), "Sunday")
test(days_in_month("February"), 28)
test(days_in_month("December"), 31)
test(to_secs(230, 10), 9010)
test(to_secs(200), 7200)
test(to_secs(02, 0), 120)
test(to_secs(0042), 42)
test(to_secs(0-10, 10), -590)
test(to_secs(2.5010.71), 9010)
test(to_secs(2.433,0,0), 8758)
C# PDF File Split Library: Split, seperate PDF into multiple files
page of your defined page number which starts from 0. For example, your original PDF file contains 4 pages. C# DLLs: Split PDF Document. Add necessary references
convert protected pdf to word; change password on pdf file
C# PDF File Merge Library: Merge, append PDF files in C#.net, ASP.
Add necessary references: using RasterEdge.XDoc.PDF; Note: When you get the error "Could not load file or assembly 'RasterEdge.Imaging.Basic' or any other
pdf print protection; convert password protected pdf files to word online
6. Fruitful functions — How to Think Like a Computer Scientist: Learning with Python 3
http://openbookproject.net/thinkcs/python/english3e/fruitful_functions.html[1/4/2012 9:37:16 PM]
are some test cases:
10.  Which of these tests fail? Explain why.
11.  Write a 
compare function that returns 
1 if 
a > b
0 if 
a == b, and 
-1 if 
a < b
12.  Write a function called 
hypotenuse that returns the length of the hypotenuse of a right triangle
given the lengths of the two legs as parameters:
13.  Write a function 
slope(x1, y1, x2, y2) that returns the slope of the line through the points (x1,
y1) and (x2, y2). Be sure your implementation of 
slope can pass the following tests:
Then use a call to 
slope in a new function named 
intercept(x1, y1, x2, y2) that returns the y-
intercept of the line through the points 
(x1, y1) and 
(x2, y2)
14.  Write a function called 
is_even(n) that takes an integer as an argument and returns True if the
argument is an even number and False if it is odd.
Add your own tests to the test suite.
15.  Now write the function 
is_odd(n) that returns True when 
n is odd and False otherwise. Include
unit tests for this function too.
Finally, modify it so that it uses a call to 
is_even to determine if its argument is an odd integer,
and ensure that its test still pass.
16.  Write a function 
is_factor(f, n) that passes these tests:
test(hours_in(9010), 2)
test(minutes_in(9010), 30)
test(seconds_in(9010), 10)
test(3 % 40)
test(3 % 43)
test(3 / 40)
test(3 // 40)
test(3+4  *  214)
test(4-2+20)
test(len("hello, world!"), 13)
test(compare(54), 1)
test(compare(77), 0)
test(compare(23), -1)
test(compare(421), 1)
test(hypotenuse(34), 5.0)
test(hypotenuse(125), 13.0)
test(hypotenuse(247), 25.0)
test(hypotenuse(912), 15.0)
test(slope(534, 2), 1.0)
test(slope(1232), 0.0)
test(slope(1233), 0.5)
test(slope(2412), 2.0)
test(intercept(16312), 3.0)
test(intercept(6116), 7.0)
test(intercept(46128), 5.0)
6. Fruitful functions — How to Think Like a Computer Scientist: Learning with Python 3
http://openbookproject.net/thinkcs/python/english3e/fruitful_functions.html[1/4/2012 9:37:16 PM]
index
next |
previous  |
How to Think Like a Computer Scientist: Learning with Python 3 »
An important role of unit tests is that they can also act as unambiguous “specifications” of what
is expected. These test cases answer the question 
Do we treat 1 and 15 as factors of 15?
17.  Write 
is_multiple to satisfy these unit tests:
Can you find a way to use 
is_factor in your definition of 
is_multiple?
18.  Write the function 
f2c(t) designed to return the integer value of the nearest degree Celsius for
given tempurature in Fahrenheit. (
hint:
you may want to make use of the built-in function,
round. Try printing 
round.__doc__ in a Python shell or looking up help for the 
round function, and
experimenting with it until you are comfortable with how it works.)
19.  Now do the opposite: write the function 
c2f which converts Celcius to Fahrenheit:
© 
Copyright 2011, Peter Wentworth, Jeffrey Elkner, Allen B. Downey and Chris Meyers. Created using 
Sphinx 1.0.7.
test(is_factor(312), True)
test(is_factor(512), False)
test(is_factor(714), True)
test(is_factor(715), False)
test(is_factor(115), True)
test(is_factor(1515), True)
test(is_factor(2515), False)
test(is_multiple(123), True)
test(is_multiple(124), True)
test(is_multiple(125), False)
test(is_multiple(126), True)
test(is_multiple(127), False)
test(f2c(212), 100)     # boiling point of water
test(f2c(32), 0)        # freezing point of water
test(f2c(-40), -40)     # Wow, what an interesting case!
test(f2c(36), 2)
test(f2c(37), 3)
test(f2c(38), 3)
test(f2c(39), 4)
test(c2f(0), 32)
test(c2f(100), 212)
test(c2f(-40), -40)
test(c2f(12), 54)
test(c2f(18), 64)
test(c2f(-48), -54)
7. Iteration — How to Think Like a Computer Scientist: Learning with Python 3
http://openbookproject.net/thinkcs/python/english3e/iteration.html[1/4/2012 9:37:23 PM]
index
next  |
previous  |
How to Think Like a Computer Scientist: Learning with Python 3 »
7. Iteration
Computers are often used to automate repetitive tasks. Repeating identical or similar tasks without making errors
is something that computers do well and people do poorly.
Repeated execution of a set of statements is called iteration. Because iteration is so common, Python provides
several language features to make it easier. We’ve already seen the 
for statement in chapter 3. This the the form of
iteration you’ll likely be using most often. But in this chapter we’ve going to look at the 
while statement — another
way to have your program do iteration, useful in slightly different circumstances.
Before we do that, let’s just review a few ideas...
7.1. Reassignment
As we have mentioned previously, it is legal to make more than one assignment to the same variable. A new
assignment makes an existing variable refer to a new value (and stop referring to the old value).
The output of this program is:
because the first time 
bruce is printed, its value is 5, and the second time, its value is 7.
Here is what reassignment looks like in a state snapshot:
With reassignment it is especially important to distinguish between an assignment statement and a boolean
expression that tests for equality. Because Python uses the equal token (
=) for assignment, it is tempting to
interpret a statement like 
a = b as a boolean test. Unlike mathematics, it is not! Remember that the Python token
for the equality operator is 
==.
Note too that an equality test is symmetric, but assignment is not. For example, if 
a == 7 then 
7 == a. But in
Python, the statement 
a = 7 is legal and 
7 = a is not.
Furthermore, in mathematics, a statement of equality is always true. If 
a == b now, then 
a will always equal 
b. In
Python, an assignment statement can make two variables equal, but because of the possibility of reassignment,
they don’t have to stay that way:
The third line changes the value of 
a but does not change the value of 
b, so they are no longer equal. (In some
programming languages, a different symbol is used for assignment, such as 
<- or 
:=, to avoid confusion. Python
chose to use the tokens 
= for assignment, and 
== for equality. This is a popular choice also found in languages like
C, C++, Java, and C#.)
7.2. Updating variables
1
2
3
4
bruce = 5
print(bruce)
bruce = 7
print(bruce)
5
7
1
2
3
= 5
= a    # after executing this line, a and b are now equal
= 3    # after executing this line, a and b are no longer equal
7. Iteration — How to Think Like a Computer Scientist: Learning with Python 3
http://openbookproject.net/thinkcs/python/english3e/iteration.html[1/4/2012 9:37:23 PM]
When an assignment statement is executed, the right-hand-side expression (i.e. the expression that comes after
the assignment token) is evaluated first. Then the result of that evaluation is written into the variable on the left
hand side, thereby changing it.
One of the most common forms of reassignment is an update, where the new value of the variable depends on its
old value.
Line 2 means get the current value of n, multiply it by three and add one, and put the answer back into n as
its new value. So after executing the two lines above, 
n will have the value 16.
If you try to get the value of a variable that doesn’t exist yet, you’ll get an error:
Before you can update a variable, you have to initialize it, usually with a simple assignment:
This second statement — updating a variable by adding 1 to it — is very common. It is called an increment of the
variable; subtracting 1 is called a decrement. Sometimes programmers also talk about bumping a variable, which
means the same as incrementing it by 1.
7.3. The 
for loop revisited
Recall that the 
for loop processes each item in a list. Each item in turn is (re-)assigned to the loop variable, and the
body of the loop is executed. We saw this example in an earlier chapter:
Running through all the items in a list is called traversing the list, or traversal.
Let us write a function now to sum up all the elements in a list of numbers. Do this by hand first, and try to isolate
exactly what steps you take. You’ll find you need to keep some “running total” of the sum so far, either on a piece
of paper, or in your head. Remembering things from one step to the next is precisely why we have variables in a
program: so we’ll need some variable to remember the “running total”. It should be initialized with a value of zero,
and then we need to traverse the items in the list. For each item, we’ll want to update the running total by adding
the next number to it.
1
2
= 5
= 3*+ 1
>>> w = x + 1
Traceback (most recent call last):
File "<interactive input>", line 1, in
NameError: name 'x' is not defined
>>> = 0
>>> = x + 1
1
2
3
for f in ["Joe""Amy""Brad""Angelina""Zuki""Thandi""Paris"]:
invitation = "Hi " + f + ".  Please come to my party on Saturday!"
print(invitation)
1
2
3
4
5
6
7
8
9
10
11
12
13
def mysum(xs):
""" Sum all the numbers in the list xs, and return the total. """
running_total = 0
for x in xs:
running_total = running_total + x
return running_total
#add tests like these to your test suite ...
test(mysum([123, 4]), 10)
test(mysum([1.252.5, 1.75]), 5.5)
test(mysum([1-2, 3]), 2)
test(mysum([ ]), 0)
test(mysum(range(11)), 55)    # 11 is not in the list.
7. Iteration — How to Think Like a Computer Scientist: Learning with Python 3
http://openbookproject.net/thinkcs/python/english3e/iteration.html[1/4/2012 9:37:23 PM]
7.4. The 
while statement
Here is a fragment of code that demonstrates the use of the 
while statement:
You can almost read the 
while statement as if it were English. It means, While 
v is less than or equal to 
n, continue
executing the body of the loop. Within the body, each time, increment 
v. When 
v passes 
n, return your accumulated
sum.
More formally, here is precise flow of execution for a 
while statement:
1. Evaluate the condition, yielding False or True.
2. If the condition is false, exit the 
while statement and continue execution at the next statement.
3. If the condition is true, execute each of the statements in the body and then go back to step 1.
The body consists of all of the statements below the header with the same indentation.
This type of flow is called a loop because the third step loops back around to the top. Notice that if the condition is
false the first time through the loop, the statements inside the loop are never executed.
The body of the loop should change the value of one or more variables so that eventually the condition becomes
false and the loop terminates. Otherwise the loop will repeat forever, which is called an infinite loop. An endless
source of amusement for computer scientists is the observation that the directions on shampoo, lather, rinse,
repeat, are an infinite loop.
In the case here, we can prove that the loop terminates because we know that the value of 
n is finite, and we can
see that the value of 
v increments each time through the loop, so eventually it will have to exceed 
n. In other cases,
it is not so easy to tell.
What you will notice here is that the 
while loop is more work for you — the programmer — than the equivalent 
for
loop. When using a 
while loop one has to control the loop variable yourself: give it an initial value, test for
completion, and then make sure you change something in the body so that the loop terminates. By comparison,
here is an alternative function that uses 
for instead:
Notice the slightly tricky call to the 
range function — we had to add one onto 
n, because 
range generates its list up
to but not including the value you give it. It would be easy to make a programming mistake and overlook this, but
because we’ve made the investment of writing some unit tests, our test suite would have caught our error.
So why have two kinds of loop if 
for looks easier? This next example shows a case where we need the extra power
that we get from the 
while loop.
7.5. The 3n + 1 sequence
Let’s look at a simple sequence that has fascinated and foxed mathematicians for many years. They still cannot
answer even quite simple questions about this.
1
2
3
4
5
6
7
8
9
10
11
12
def sum_to(n):
""" Return the sum of 1+2+3 ... n """
ss  = 0
= 1
while v <= n:
ss = ss + v
= v + 1
return ss
# for your test suite
test(sum_to(4), 10)
test(sum_to(1000), 500500)
1
2
3
4
5
6
def sum_to(n):
""" Return the sum of 1+2+3 ... n """
ss  = 0
for v in range(n+1):
ss = ss + v
return ss
Documents you may be interested
Documents you may be interested