100% found this document useful (1 vote)
17 views

Fundamentals of Python: First Programs, 2nd Edition Kenneth A. Lambert - eBook PDF download

The document is a promotional material for the eBook 'Fundamentals of Python: First Programs, 2nd Edition' by Kenneth A. Lambert, which includes download links and additional resources for related eBooks. It outlines the structure of the book, including chapters on computer science fundamentals, software development, data types, and programming concepts. The document also contains copyright information and details on the publisher's rights and responsibilities regarding the content.

Uploaded by

wensonlemeow
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
100% found this document useful (1 vote)
17 views

Fundamentals of Python: First Programs, 2nd Edition Kenneth A. Lambert - eBook PDF download

The document is a promotional material for the eBook 'Fundamentals of Python: First Programs, 2nd Edition' by Kenneth A. Lambert, which includes download links and additional resources for related eBooks. It outlines the structure of the book, including chapters on computer science fundamentals, software development, data types, and programming concepts. The document also contains copyright information and details on the publisher's rights and responsibilities regarding the content.

Uploaded by

wensonlemeow
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 59

Fundamentals of Python: First Programs, 2nd

Edition Kenneth A. Lambert - eBook PDF pdf


download

https://ebooksecure.com/download/fundamentals-of-python-first-
programs-2nd-edition-ebook-pdf/

Download more ebook from https://ebooksecure.com


We believe these products will be a great fit for you. Click
the link to download now, or visit ebooksecure.com
to discover even more!

Fundamentals Of Python: Data Structures 2nd Edition


Kenneth A. Lambert - eBook PDF

https://ebooksecure.com/download/fundamentals-of-python-data-
structures-ebook-pdf/

(eBook PDF) Fundamentals of Python: First Programs 2nd


Edition

http://ebooksecure.com/product/ebook-pdf-fundamentals-of-python-
first-programs-2nd-edition/

(eBook PDF) Building Python Programs 1st Edition

http://ebooksecure.com/product/ebook-pdf-building-python-
programs-1st-edition/

(eBook PDF) Principles of Music 2nd Edition by Philip


Lambert

http://ebooksecure.com/product/ebook-pdf-principles-of-music-2nd-
edition-by-philip-lambert/
(eBook PDF) Evaluation of Health Promotion Programs 2nd
Edition

http://ebooksecure.com/product/ebook-pdf-evaluation-of-health-
promotion-programs-2nd-edition/

(eBook PDF) Fundamentals of Investing, First Canadian


Edition

http://ebooksecure.com/product/ebook-pdf-fundamentals-of-
investing-first-canadian-edition/

Fundamentals of Structural Analysis 5th Edition Kenneth


M. Leet - eBook PDF

https://ebooksecure.com/download/fundamentals-of-structural-
analysis-ebook-pdf/

Essentials of Anatomy & Physiology, 2nd Edition Kenneth


S. Saladin - eBook PDF

https://ebooksecure.com/download/essentials-of-anatomy-
physiology-2nd-edition-ebook-pdf/

(eBook PDF) Access Spanish: A First Language Course 2nd


Edition

http://ebooksecure.com/product/ebook-pdf-access-spanish-a-first-
language-course-2nd-edition/
Copyright 2019 Cengage Learning. All Rights Reserved. May not be copied, scanned, or duplicated, in whole or in part. WCN 02-200-203
second Edition

Fundamentals of Python:
First Programs

Kenneth A. Lambert

Martin Osborne,
Contributing Author

Australia • Brazil • Mexico • Singapore • United Kingdom • United States

Copyright 2019 Cengage Learning. All Rights Reserved. May not be copied, scanned, or duplicated, in whole or in part. WCN 02-200-203
Copyright 2019 Cengage Learning. All Rights Reserved. May not be copied, scanned, or duplicated, in whole or in part. Due to electronic rights, some third party content may be suppressed from the eBook and/or eChapter(s).
Editorial review has deemed that any suppressed content does not materially affect the overall learning experience. Cengage Learning reserves the right to remove additional content at any time if subsequent rights restrictions require it.
This is an electronic version of the print textbook. Due to electronic rights restrictions,
some third party content may be suppressed. Editorial review has deemed that any suppressed
content does not materially affect the overall learning experience. The publisher reserves the right
to remove content from this title at any time if subsequent rights restrictions require it. For
valuable information on pricing, previous editions, changes to current editions, and alternate
formats, please visit www.cengage.com/highered to search by ISBN#, author, title, or keyword for
materials in your areas of interest.

Important Notice: Media content referenced within the product description or the product
text may not be available in the eBook version.

Copyright 2019 Cengage Learning. All Rights Reserved. May not be copied, scanned, or duplicated, in whole or in part. WCN 02-200-203
Copyright 2019 Cengage Learning. All Rights Reserved. May not be copied, scanned, or duplicated, in whole or in part. Due to electronic rights, some third party content may be suppressed from the eBook and/or eChapter(s).
Editorial review has deemed that any suppressed content does not materially affect the overall learning experience. Cengage Learning reserves the right to remove additional content at any time if subsequent rights restrictions require it.
Fundamentals of Python: © 2019, 2012 Cengage
First Programs, Second Edition
ALL RIGHTS RESERVED. No part of this work covered by the copy-
­Kenneth A. Lambert
right herein may be reproduced or distributed in any form or by
any means, except as permitted by U.S. copyright law, without the
SVP, GM Skills: Jonathan Lau prior written permission of the copyright owner.

Product Team Manager: Kristin Unless otherwise noted all tables/figures exhibits are © 2019 ­Cengage®
McNary

Associate Product Manager: Kate


For product information and technology assistance, contact us
Mason
at Cengage Customer & Sales Support, 1-800-354-9706
Executive Director of Development:
Marah Bellegarde For permission to use material from this text or product, submit
all requests online at www.cengage.com/permissions.
Senior Content Development Further permissions questions can be e-mailed to
­Manager: Leigh Hefferon permissionrequest@cengage.com

Content Development Manager: Jill


Gallagher
Library of Congress Control Number: 2017952738
Senior Content Developer: Natalie
Pashoukos
Softbound ISBN: 978-1-337-56009-2
Product Assistant: Jake Toth Loose Leaf ISBN: 978-1-337-69934-1

Marketing Director: Michele McTighe Cengage


20 Channel Center Street
Marketing Manager: Stephanie Boston, MA, 02210
Albracht
USA
Senior Content Project Manager:
Cengage is a leading provider of customized learning solutions with
Jennifer Feltri-George
employees residing in nearly 40 different countries and sales in more
Senior Designer/Art Director: Diana than 125 countries around the world. Find your local representative
Graham at www.cengage.com.

Cover image: Digital_Art/­ Cengage products are represented in Canada by Nelson Education, Ltd.
Shutterstock.com To learn more about Cengage, visit www.cengage.com.
Production Service/Composition: Purchase any of our products at your local college store or at our
SPi Global ­preferred online store www.cengagebrain.com.

Notice to the Reader

Publisher does not warrant or guarantee any of the products described herein or perform any independent analysis
in connection with any of the product information contained herein. Publisher does not assume, and expressly
disclaims, any obligation to obtain and include information other than that provided to it by the manufacturer. The
reader is expressly warned to consider and adopt all safety precautions that might be indicated by the activities
described herein and to avoid all potential hazards. By following the instructions contained herein, the reader willingly
assumes all risks in connection with such instructions. The publisher makes no representations or warranties of any
kind, including but not limited to, the warranties of fitness for particular purpose or merchantability, nor are any
such representations implied with respect to the material set forth herein, and the publisher takes no responsibility
with respect to such material. The publisher shall not be liable for any special, consequential, or exemplary damages
resulting, in whole or part, from the readers’ use of, or reliance upon, this material.

Printed in the United States of America


Print Number: 01 Print Year: 2017
Copyright 2019 Cengage Learning. All Rights Reserved. May not be copied, scanned, or duplicated, in whole or in part. WCN 02-200-203
Copyright 2019 Cengage Learning. All Rights Reserved. May not be copied, scanned, or duplicated, in whole or in part. Due to electronic rights, some third party content may be suppressed from the eBook and/or eChapter(s).
Editorial review has deemed that any suppressed content does not materially affect the overall learning experience. Cengage Learning reserves the right to remove additional content at any time if subsequent rights restrictions require it.
Table of Contents
iii

Pref ace ������������������������������������������������ xiii

CHAPTER 1 I n t ro du ct io n����������������������������������������������� 1
Two Fundamental Ideas of Computer Science: ­
Algorithms and Information Processing ������������������������������ 2
Algorithms ������������������������������������������������������������������� 2
Information Processing��������������������������������������������������� 4
Exercises ������������������������������������������������������������������������ 5
The Structure of a Modern Computer System������������������������ 6
Computer Hardware ������������������������������������������������������� 6
Computer Software ������������������������������������������������������� 7
Exercises ������������������������������������������������������������������������ 9
A Not-So-Brief History of Computing Systems������������������������ 9
Before Electronic Digital Computers��������������������������������11
The First Electronic Digital Computers (1940–1950) ���������13
The First Programming Languages (1950–1965) ��������������14
Integrated Circuits, Interaction,
and Timesharing (1965–1975)��������������������������������������16
Personal Computing and Networks (1975–1990) ��������������17
Consultation, Communication,
and E-Commerce (1990–2000)��������������������������������������19
Mobile Applications and Ubiquitous
Computing (2000–present) ������������������������������������������21
Getting Started with Python Programming ���������������������������22
Running Code in the Interactive Shell ������������������������������22
Input, Processing, and Output�����������������������������������������24
Editing, Saving, and Running a Script ������������������������������27
Behind the Scenes: How Python Works�����������������������������28
Exercises �����������������������������������������������������������������������29
Detecting and Correcting Syntax Errors������������������������������29
Exercises �����������������������������������������������������������������������30
Suggestions for Further Reading ���������������������������������������30
Summary �����������������������������������������������������������������������31

Copyright 2019 Cengage Learning. All Rights Reserved. May not be copied, scanned, or duplicated, in whole or in part. WCN 02-200-203
Copyright 2019 Cengage Learning. All Rights Reserved. May not be copied, scanned, or duplicated, in whole or in part. Due to electronic rights, some third party content may be suppressed from the eBook and/or eChapter(s).
Editorial review has deemed that any suppressed content does not materially affect the overall learning experience. Cengage Learning reserves the right to remove additional content at any time if subsequent rights restrictions require it.
contents

Review Questions ������������������������������������������������������������32


Projects��������������������������������������������������������������������������33

CHAPTER 2 S o f t w are D
­ evelo pment, Data Ty pes,
iv an d Expres s io n s��������������������������������������� 34
The Software Development Process �����������������������������������35
Exercises �����������������������������������������������������������������������37
Case Study: Income Tax Calculator ������������������������������������38
Strings, Assignment, and Comments�����������������������������������41
Data Types ������������������������������������������������������������������41
String Literals��������������������������������������������������������������42
Escape Sequences��������������������������������������������������������43
String Concatenation�����������������������������������������������������43
Variables and the Assignment Statement��������������������������44
Program Comments and Docstrings ��������������������������������45
Exercises �����������������������������������������������������������������������46
Numeric Data Types and Character Sets �����������������������������47
Integers�����������������������������������������������������������������������47
Floating-Point Numbers��������������������������������������������������47
Character Sets ������������������������������������������������������������48
Exercises �����������������������������������������������������������������������49
Expressions��������������������������������������������������������������������49
Arithmetic Expressions��������������������������������������������������50
Mixed-Mode Arithmetic and Type Conversions��������������������52
Exercises �����������������������������������������������������������������������53
Using Functions and Modules ��������������������������������������������54
Calling Functions: Arguments and Return Values ���������������54
The math Module ���������������������������������������������������������55
The Main Module�����������������������������������������������������������56
Program Format and Structure ���������������������������������������57
Running a Script from a Terminal Command Prompt�����������57
Exercises �����������������������������������������������������������������������59
Summary �����������������������������������������������������������������������59
Review Questions ������������������������������������������������������������61
Projects��������������������������������������������������������������������������62

CHAPTER 3 Lo o ps an d S elec ti on S tatements������������������ 64


Definite Iteration: The for Loop�����������������������������������������65
Executing a Statement a Given Number of Times ��������������65
Count-Controlled Loops��������������������������������������������������66
Augmented Assignment��������������������������������������������������67
Copyright 2019 Cengage Learning. All Rights Reserved. May not be copied, scanned, or duplicated, in whole or in part. WCN 02-200-203
Copyright 2019 Cengage Learning. All Rights Reserved. May not be copied, scanned, or duplicated, in whole or in part. Due to electronic rights, some third party content may be suppressed from the eBook and/or eChapter(s).
Editorial review has deemed that any suppressed content does not materially affect the overall learning experience. Cengage Learning reserves the right to remove additional content at any time if subsequent rights restrictions require it.
contents

Loop Errors: Off-by-One Error�����������������������������������������68


Traversing the Contents of a Data Sequence ��������������������68
Specifying the Steps in the Range�����������������������������������69
Loops That Count Down ������������������������������������������������69
Exercises �����������������������������������������������������������������������70
Formatting Text for Output������������������������������������������������70 v
Exercises �����������������������������������������������������������������������72
Case Study: An Investment Report��������������������������������������73
Selection: if and if-else Statements ������������������������������77
The Boolean Type, Comparisons, and Boolean
Expressions ���������������������������������������������������������������77
if-else Statements�����������������������������������������������������78
One-Way Selection Statements ���������������������������������������79
Multi-Way if Statements �����������������������������������������������80
Logical Operators and Compound Boolean Expressions �����82
Short-Circuit Evaluation��������������������������������������������������84
Testing Selection Statements �����������������������������������������84
Exercises �����������������������������������������������������������������������85
Conditional Iteration: The while Loop ��������������������������������86
The Structure and Behavior of a while Loop��������������������86
Count Control with a while Loop������������������������������������87
The while True Loop and the break Statement���������������88
Random Numbers ���������������������������������������������������������90
Loop Logic, Errors, and Testing��������������������������������������91
Exercises �����������������������������������������������������������������������92
Case Study: Approximating Square Roots ���������������������������92
Summary �����������������������������������������������������������������������96
Review Questions ������������������������������������������������������������97
Projects��������������������������������������������������������������������������99

CHAPTER 4 S t r in g s an d Text Fi l es ����������������������������� 102


Accessing Characters and Substrings in Strings ��������������� 103
The Structure of Strings ��������������������������������������������� 103
The Subscript Operator����������������������������������������������� 104
Slicing for Substrings ������������������������������������������������ 105
Testing for a Substring with the in Operator ����������������� 105
Exercises �������������������������������������������������������������������� 106
Data Encryption ����������������������������������������������������������� 106
Exercises �������������������������������������������������������������������� 109
Strings and Number Systems ����������������������������������������� 109
The Positional System for Representing Numbers����������� 110
Converting Binary to Decimal �������������������������������������� 111
Copyright 2019 Cengage Learning. All Rights Reserved. May not be copied, scanned, or duplicated, in whole or in part. WCN 02-200-203
Copyright 2019 Cengage Learning. All Rights Reserved. May not be copied, scanned, or duplicated, in whole or in part. Due to electronic rights, some third party content may be suppressed from the eBook and/or eChapter(s).
Editorial review has deemed that any suppressed content does not materially affect the overall learning experience. Cengage Learning reserves the right to remove additional content at any time if subsequent rights restrictions require it.
contents

Converting Decimal to Binary �������������������������������������� 112


Conversion Shortcuts ������������������������������������������������ 112
Octal and Hexadecimal Numbers ��������������������������������� 113
Exercises �������������������������������������������������������������������� 114
String Methods ������������������������������������������������������������ 115
vi Exercises �������������������������������������������������������������������� 118
Text Files �������������������������������������������������������������������� 118
Text Files and Their Format����������������������������������������� 118
Writing Text to a File �������������������������������������������������� 119
Writing Numbers to a File�������������������������������������������� 119
Reading Text from a File ��������������������������������������������� 120
Reading Numbers from a File �������������������������������������� 121
Accessing and Manipulating Files and Directories
on Disk ������������������������������������������������������������������ 122
Exercises �������������������������������������������������������������������� 125
Case Study: Text Analysis����������������������������������������������� 126
Summary �������������������������������������������������������������������� 130
Review Questions ��������������������������������������������������������� 131
Projects����������������������������������������������������������������������� 132

CHAPTER 5 Lis t s an d Dict io nari es ����������������������������� 134


Lists �������������������������������������������������������������������������� 135
List Literals and Basic Operators��������������������������������� 135
Replacing an Element in a List ������������������������������������ 138
List Methods for Inserting and Removing Elements��������� 138
Searching a List �������������������������������������������������������� 140
Sorting a List ����������������������������������������������������������� 140
Mutator Methods and the Value None ��������������������������� 141
Aliasing and Side Effects �������������������������������������������� 141
Equality: Object Identity and Structural
Equivalence ������������������������������������������������������������ 143
Example: Using a List to Find the Median
of a Set of Numbers ������������������������������������������������ 143
Tuples ��������������������������������������������������������������������� 144
Exercises �������������������������������������������������������������������� 145
Defining Simple Functions ��������������������������������������������� 146
The Syntax of Simple Function Definitions ��������������������� 146
Parameters and Arguments����������������������������������������� 147
The return Statement����������������������������������������������� 147
Boolean Functions ����������������������������������������������������� 148
Defining a main Function �������������������������������������������� 148
Exercises �������������������������������������������������������������������� 149
Case Study: Generating Sentences ��������������������������������� 150
Copyright 2019 Cengage Learning. All Rights Reserved. May not be copied, scanned, or duplicated, in whole or in part. WCN 02-200-203
Copyright 2019 Cengage Learning. All Rights Reserved. May not be copied, scanned, or duplicated, in whole or in part. Due to electronic rights, some third party content may be suppressed from the eBook and/or eChapter(s).
Editorial review has deemed that any suppressed content does not materially affect the overall learning experience. Cengage Learning reserves the right to remove additional content at any time if subsequent rights restrictions require it.
contents

Dictionaries ����������������������������������������������������������������� 153


Dictionary Literals ����������������������������������������������������� 153
Adding Keys and Replacing Values�������������������������������� 154
Accessing Values ������������������������������������������������������ 154
Removing Keys ��������������������������������������������������������� 155
Traversing a Dictionary����������������������������������������������� 155 vii
Example: The Hexadecimal System Revisited����������������� 156
Example: Finding the Mode of a List of Values ��������������� 157
Exercises �������������������������������������������������������������������� 158
Case Study: Nondirective Psychotherapy�������������������������� 159
Summary �������������������������������������������������������������������� 163
Review Questions ��������������������������������������������������������� 164
Projects����������������������������������������������������������������������� 165

CHAPTER 6 Des ig n w it h F u ncti ons ����������������������������� 167


A Quick Review of What Functions Are and How
They Work ����������������������������������������������������������������� 168
Functions as Abstraction Mechanisms �������������������������� 169
Functions Eliminate Redundancy����������������������������������� 169
Functions Hide Complexity ������������������������������������������ 170
Functions Support General Methods with Systematic
Variations ��������������������������������������������������������������� 170
Functions Support the Division of Labor ����������������������� 171
Exercises �������������������������������������������������������������������� 171
Problem Solving with Top-Down Design����������������������������� 172
The Design of the Text-Analysis Program����������������������� 172
The Design of the Sentence-Generator Program�������������� 173
The Design of the Doctor Program�������������������������������� 174
Exercises �������������������������������������������������������������������� 176
Design with Recursive Functions�������������������������������������� 176
Defining a Recursive Function�������������������������������������� 176
Tracing a Recursive Function �������������������������������������� 177
Using Recursive Definitions to Construct Recursive
Functions ��������������������������������������������������������������� 178
Recursion in Sentence Structure����������������������������������� 179
Infinite Recursion ������������������������������������������������������ 179
The Costs and Benefits of Recursion����������������������������� 180
Exercises �������������������������������������������������������������������� 182
Case Study: Gathering Information from a File System�������� 183
Managing a Program’s Namespace ��������������������������������� 190
Module Variables, Parameters, and Temporary
Variables����������������������������������������������������������������� 190
Scope ��������������������������������������������������������������������� 191
Copyright 2019 Cengage Learning. All Rights Reserved. May not be copied, scanned, or duplicated, in whole or in part. WCN 02-200-203
Copyright 2019 Cengage Learning. All Rights Reserved. May not be copied, scanned, or duplicated, in whole or in part. Due to electronic rights, some third party content may be suppressed from the eBook and/or eChapter(s).
Editorial review has deemed that any suppressed content does not materially affect the overall learning experience. Cengage Learning reserves the right to remove additional content at any time if subsequent rights restrictions require it.
contents

Lifetime�������������������������������������������������������������������� 192
Using Keywords for Default and Optional Arguments�������� 193
Exercises �������������������������������������������������������������������� 194
Higher-Order Functions�������������������������������������������������� 195
Functions as First-Class Data Objects��������������������������� 195
viii Mapping�������������������������������������������������������������������� 196
Filtering�������������������������������������������������������������������� 197
Reducing ����������������������������������������������������������������� 197
Using lambda to Create Anonymous Functions �������������� 198
Creating Jump Tables�������������������������������������������������� 199
Exercises �������������������������������������������������������������������� 199
Summary �������������������������������������������������������������������� 200
Review Questions ��������������������������������������������������������� 202
Projects����������������������������������������������������������������������� 203

CHAPTER 7 S im ple Gr aph ics and Image Processi ng ������� 205


Simple Graphics����������������������������������������������������������� 206
Overview of Turtle Graphics����������������������������������������� 206
Turtle Operations ������������������������������������������������������ 207
Setting Up a turtle.cfg File and Running IDLE����������������� 209
Object Instantiation and the turtle Module ������������������ 210
Drawing Two-Dimensional Shapes �������������������������������� 212
Examining an Object’s Attributes ��������������������������������� 213
Manipulating a Turtle’s Screen�������������������������������������� 214
Taking a Random Walk ���������������������������������������������� 214
Colors and the RGB System����������������������������������������� 215
Example: Filling Radial Patterns with Random
Colors�������������������������������������������������������������������� 216
Exercises �������������������������������������������������������������������� 218
Case Study: Recursive Patterns in Fractals����������������������� 218
Image Processing �������������������������������������������������������� 222
Analog and Digital Information�������������������������������������� 223
Sampling and Digitizing Images ����������������������������������� 223
Image File Formats����������������������������������������������������� 224
Image-Manipulation Operations ������������������������������������ 224
The Properties of Images�������������������������������������������� 225
The images Module ��������������������������������������������������� 225
A Loop Pattern for Traversing a Grid����������������������������� 228
A Word on Tuples ������������������������������������������������������ 229
Converting an Image to Black and White ����������������������� 230
Converting an Image to Grayscale�������������������������������� 231
Copying an Image ����������������������������������������������������� 232
Blurring an Image ������������������������������������������������������ 233
Copyright 2019 Cengage Learning. All Rights Reserved. May not be copied, scanned, or duplicated, in whole or in part. WCN 02-200-203
Copyright 2019 Cengage Learning. All Rights Reserved. May not be copied, scanned, or duplicated, in whole or in part. Due to electronic rights, some third party content may be suppressed from the eBook and/or eChapter(s).
Editorial review has deemed that any suppressed content does not materially affect the overall learning experience. Cengage Learning reserves the right to remove additional content at any time if subsequent rights restrictions require it.
contents

Edge Detection ��������������������������������������������������������� 234


Reducing the Image Size �������������������������������������������� 235
Exercises �������������������������������������������������������������������� 237
Summary �������������������������������������������������������������������� 237
Review Questions ��������������������������������������������������������� 238
Projects����������������������������������������������������������������������� 240 ix

CHAPTER 8 G r aph ical Us er Inter faces ������������������������� 244


The Behavior of Terminal-Based Programs and ­GUI-Based
Programs ������������������������������������������������������������������ 245
The Terminal-Based Version����������������������������������������� 246
The GUI-Based Version ����������������������������������������������� 246
Event-Driven Programming ������������������������������������������ 248
Exercises �������������������������������������������������������������������� 249
Coding Simple GUI-Based Programs �������������������������������� 249
A Simple “Hello World” Program����������������������������������� 249
A Template for All GUI Programs����������������������������������� 251
The Syntax of Class and Method Definitions ������������������ 251
Subclassing and Inheritance as Abstraction
Mechanisms ����������������������������������������������������������� 252
Exercises �������������������������������������������������������������������� 253
Windows and Window Components����������������������������������� 253
Windows and Their Attributes �������������������������������������� 253
Window Layout����������������������������������������������������������� 254
Types of Window Components and Their Attributes��������� 256
Displaying Images ����������������������������������������������������� 257
Exercises �������������������������������������������������������������������� 259
Command Buttons and Responding to Events�������������������� 260
Exercises �������������������������������������������������������������������� 262
Input and Output with Entry Fields����������������������������������� 262
Text Fields ��������������������������������������������������������������� 262
Integer and Float Fields for Numeric Data ��������������������� 264
Using Pop-Up Message Boxes�������������������������������������� 265
Exercises �������������������������������������������������������������������� 267
Defining and Using Instance Variables ����������������������������� 267
Exercises �������������������������������������������������������������������� 269
Case Study: The Guessing Game Revisited����������������������� 269
Other Useful GUI Resources�������������������������������������������� 273
Using Nested Frames to Organize Components�������������� 273
Multi-Line Text Areas �������������������������������������������������� 275
File Dialogs �������������������������������������������������������������� 277
Obtaining Input with Prompter Boxes����������������������������� 280
Check Buttons����������������������������������������������������������� 281
Copyright 2019 Cengage Learning. All Rights Reserved. May not be copied, scanned, or duplicated, in whole or in part. WCN 02-200-203
Copyright 2019 Cengage Learning. All Rights Reserved. May not be copied, scanned, or duplicated, in whole or in part. Due to electronic rights, some third party content may be suppressed from the eBook and/or eChapter(s).
Editorial review has deemed that any suppressed content does not materially affect the overall learning experience. Cengage Learning reserves the right to remove additional content at any time if subsequent rights restrictions require it.
contents

Radio Buttons ����������������������������������������������������������� 282


Keyboard Events�������������������������������������������������������� 284
Working with Colors��������������������������������������������������� 285
Using a Color Chooser ����������������������������������������������� 287
Summary �������������������������������������������������������������������� 289
x Review Questions ��������������������������������������������������������� 289
Projects����������������������������������������������������������������������� 290

CHAPTER 9 Des ig n w it h Clas ses �������������������������������� 293


Getting Inside Objects and Classes ��������������������������������� 294
A First Example: The Student Class����������������������������� 295
Docstrings ��������������������������������������������������������������� 297
Method Definitions����������������������������������������������������� 297
The __init __ Method and Instance Variables����������������� 298
The __str __ Method �������������������������������������������������� 299
Accessors and Mutators��������������������������������������������� 299
The Lifetime of Objects����������������������������������������������� 299
Rules of Thumb for Defining a Simple Class ������������������ 300
Exercises �������������������������������������������������������������������� 301
Case Study: Playing the Game of Craps��������������������������� 301
Data-Modeling Examples������������������������������������������������ 309
Rational Numbers ������������������������������������������������������ 309
Rational Number Arithmetic and Operator Overloading����� 311
Comparison Methods�������������������������������������������������� 312
Equality and the __eq__ Method����������������������������������� 313
Savings Accounts and Class Variables �������������������������� 314
Putting the Accounts into a Bank ��������������������������������� 317
Using pickle for Permanent Storage of Objects����������� 319
Input of Objects and the try-except Statement����������� 320
Playing Cards ����������������������������������������������������������� 321
Exercises �������������������������������������������������������������������� 324
Case Study: An ATM ����������������������������������������������������� 324
Building a New Data Structure: The Two-Dimensional Grid �� 330
The Interface of the Grid Class����������������������������������� 330
The Implementation of the Grid Class: Instance
Variables for the Data����������������������������������������������� 332
The Implementation of the Grid Class: Subscript
and Search�������������������������������������������������������������� 333
Case Study: Data Encryption with a Block Cipher �������������� 333
Structuring Classes with Inheritance and Polymorphism ����� 337
Inheritance Hierarchies and Modeling ��������������������������� 338
Example 1: A Restricted Savings Account ��������������������� 339
Example 2: The Dealer and a Player in the Game
ofRights
Copyright 2019 Cengage Learning. All Blackjack������������������������������������������������������������ 340
Reserved. May not be copied, scanned, or duplicated, in whole or in part. WCN 02-200-203
Copyright 2019 Cengage Learning. All Rights Reserved. May not be copied, scanned, or duplicated, in whole or in part. Due to electronic rights, some third party content may be suppressed from the eBook and/or eChapter(s).
Editorial review has deemed that any suppressed content does not materially affect the overall learning experience. Cengage Learning reserves the right to remove additional content at any time if subsequent rights restrictions require it.
contents

Polymorphic Methods������������������������������������������������� 344


The Costs and Benefits of Object-Oriented
Programming����������������������������������������������������������� 345
Exercises �������������������������������������������������������������������� 346
Summary �������������������������������������������������������������������� 347
Review Questions ��������������������������������������������������������� 348 xi
Projects����������������������������������������������������������������������� 349

CHAPTER 10 M u lt it h readin g , ­Networks, and Cl i ent/ Serv er


Pro g r am m in g ���������������������������������������� 352
Threads and Processes�������������������������������������������������� 353
Threads�������������������������������������������������������������������� 354
Sleeping Threads ������������������������������������������������������ 357
Producer, Consumer, and Synchronization �������������������� 358
Exercises �������������������������������������������������������������������� 364
The Readers and Writers Problem ����������������������������������� 364
Using the SharedCell Class �������������������������������������� 365
Implementing the Interface of the SharedCell Class ����� 366
Implementing the Helper Methods of the
SharedCell Class �������������������������������������������������� 368
Testing the SharedCell Class with a Counter Object ����� 369
Defining a Thread-Safe Class �������������������������������������� 370
Exercises �������������������������������������������������������������������� 371
Networks, Clients, and Servers �������������������������������������� 371
IP Addresses ������������������������������������������������������������ 372
Ports, Servers, and Clients ����������������������������������������� 373
Sockets and a Day/Time Client Script �������������������������� 373
A Day/Time Server Script�������������������������������������������� 375
A Two-Way Chat Script ����������������������������������������������� 377
Handling Multiple Clients Concurrently �������������������������� 378
Exercises �������������������������������������������������������������������� 380
Case Study: Setting Up Conversations between Doctors
and Patients �������������������������������������������������������������� 381
Summary �������������������������������������������������������������������� 386
Review Questions ��������������������������������������������������������� 387
Projects����������������������������������������������������������������������� 388

CHAPTER 11 S earch in g , ­So r ti ng, and Compl ex i ty Anal y si s� 390


Measuring the Efficiency of Algorithms����������������������������� 391
Measuring the Run Time of an Algorithm ����������������������� 391
Counting Instructions�������������������������������������������������� 394
Exercises
Copyright 2019 Cengage Learning. ��������������������������������������������������������������������
All Rights Reserved. 396
May not be copied, scanned, or duplicated, in whole or in part. WCN 02-200-203
Copyright 2019 Cengage Learning. All Rights Reserved. May not be copied, scanned, or duplicated, in whole or in part. Due to electronic rights, some third party content may be suppressed from the eBook and/or eChapter(s).
Editorial review has deemed that any suppressed content does not materially affect the overall learning experience. Cengage Learning reserves the right to remove additional content at any time if subsequent rights restrictions require it.
contents

Complexity Analysis ������������������������������������������������������ 397


Orders of Complexity�������������������������������������������������� 397
Big-O Notation����������������������������������������������������������� 399
The Role of the Constant of Proportionality�������������������� 400
Measuring the Memory Used by an Algorithm����������������� 400
xii Exercises �������������������������������������������������������������������� 401
Search Algorithms �������������������������������������������������������� 401
Search for a Minimum ������������������������������������������������ 401
Sequential Search of a List ����������������������������������������� 402
Best-Case, Worst-Case, and Average-Case
Performance����������������������������������������������������������� 403
Binary Search of a List����������������������������������������������� 403
Exercises �������������������������������������������������������������������� 405
Basic Sort Algorithms ��������������������������������������������������� 405
Selection Sort����������������������������������������������������������� 406
Bubble Sort �������������������������������������������������������������� 407
Insertion Sort ����������������������������������������������������������� 408
Best-Case, Worst-Case, and Average-Case
Performance Revisited ��������������������������������������������� 410
Exercises �������������������������������������������������������������������� 410
Faster Sorting�������������������������������������������������������������� 411
Quicksort ����������������������������������������������������������������� 411
Merge Sort��������������������������������������������������������������� 415
Exercises �������������������������������������������������������������������� 418
An Exponential Algorithm: Recursive Fibonacci ����������������� 419
Converting Fibonacci to a Linear Algorithm����������������������� 420
Case Study: An Algorithm Profiler ����������������������������������� 421
Summary �������������������������������������������������������������������� 427
Review Questions ��������������������������������������������������������� 428
Projects����������������������������������������������������������������������� 429

APP ENDIX A Pyt h o n Res o u rce s ���������������������������������� 432

APP ENDIX B In s t allin g t h e i mages


an d br ee zy py th ongui Li brari es �������������� 434

APP ENDIX C T h e API f o r Im age Processi ng������������������� 436

APP ENDIX D Tr an s it io n f ro m Py thon to Jav a and C++ ����� 438

Glo s s ar y ���������������������������������������������� 439

In dex ���������������������������������������������������� 455


Copyright 2019 Cengage Learning. All Rights Reserved. May not be copied, scanned, or duplicated, in whole or in part. WCN 02-200-203
Copyright 2019 Cengage Learning. All Rights Reserved. May not be copied, scanned, or duplicated, in whole or in part. Due to electronic rights, some third party content may be suppressed from the eBook and/or eChapter(s).
Editorial review has deemed that any suppressed content does not materially affect the overall learning experience. Cengage Learning reserves the right to remove additional content at any time if subsequent rights restrictions require it.
Preface
xiii

“Everyone should learn how to code.” That’s my favorite quote from Suzanne Keen, the
Thomas Broadus Professor of English and Dean of the College at Washington and Lee Uni-
versity, where I have taught computer science for more than 30 years. The quote also states
the reason why I wrote the first edition of Fundamentals of Python: First Programs, and why
I now offer you this second edition. The book is intended for an introductory course in pro-
gramming and problem solving. It covers the material taught in a typical Computer Science 1
course (CS1) at the undergraduate or high school level.
This book covers five major aspects of computing:
1. Programming Basics—Data types, control structures, algorithm development, and
program design with functions are basic ideas that you need to master in order to
solve problems with computers. This book examines these core topics in detail and
gives you practice employing your understanding of them to solve a wide range of
problems.
2. Object-Oriented Programming (OOP)—Object-oriented programming is the
dominant programming paradigm used to develop large software systems. This
book introduces you to the fundamental principles of OOP and enables you to
apply them successfully.
3. Data and Information Processing—Most useful programs rely on data structures
to solve problems. These data structures include strings, arrays, files, lists, and dic-
tionaries. This book introduces you to these commonly used data structures and
includes examples that illustrate criteria for selecting the appropriate data struc-
tures for given problems.
4. Software Development Life Cycle—Rather than isolate software development
techniques in one or two chapters, this book deals with them throughout in the
context of numerous case studies. Among other things, you’ll learn that coding a
program is often not the most difficult or challenging aspect of problem solving
and software development.
5. Contemporary Applications of Computing—The best way to learn about pro-
gramming and problem solving is to create interesting programs with real-world
applications. In this book, you’ll begin by creating applications that involve numeri-
cal problems and text processing. For example, you’ll learn the basics of encryption
techniques such as those that are used to make your credit card number and other
information secure on the Internet. But unlike many other introductory texts, this

Copyright 2019 Cengage Learning. All Rights Reserved. May not be copied, scanned, or duplicated, in whole or in part. WCN 02-200-203
Copyright 2019 Cengage Learning. All Rights Reserved. May not be copied, scanned, or duplicated, in whole or in part. Due to electronic rights, some third party content may be suppressed from the eBook and/or eChapter(s).
Editorial review has deemed that any suppressed content does not materially affect the overall learning experience. Cengage Learning reserves the right to remove additional content at any time if subsequent rights restrictions require it.
P r e f a c e Why Python?

one does not restrict itself to problems involving numbers and text. Most contem-
porary applications involve graphical user interfaces, event-driven programming,
graphics, image manipulation, and network communications. These topics are not
consigned to the margins, but are presented in depth after you have mastered the
basics of programming.
xiv

Why Python?
Computer technology and applications have become increasingly more sophisticated over
the past three decades, and so has the computer science curriculum, especially at the intro-
ductory level. Today’s students learn a bit of programming and problem solving, and they
are then expected to move quickly into topics like software development, complexity analy-
sis, and data structures that, 30 years ago, were relegated to advanced courses. In addition,
the ascent of object-oriented programming as the dominant paradigm of problem solving
has led instructors and textbook authors to implant powerful, industrial-strength program-
ming languages such as C++ and Java in the introductory curriculum. As a result, instead
of experiencing the rewards and excitement of solving problems with computers, beginning
computer science students often become overwhelmed by the combined tasks of mastering
advanced concepts as well as the syntax of a programming language.
This book uses the Python programming language as a way of making the first year of
studying computer science more manageable and attractive for students and instructors
alike. Python has the following pedagogical benefits:
•• Python has simple, conventional syntax. Python statements are very close to those of
pseudocode algorithms, and Python expressions use the conventional notation found in
algebra. Thus, students can spend less time learning the syntax of a programming lan-
guage and more time learning to solve interesting problems.
•• Python has safe semantics. Any expression or statement whose meaning violates the
definition of the language produces an error message.
•• Python scales well. It is very easy for beginners to write simple programs in Python.
Python also includes all of the advanced features of a modern programming language,
such as support for data structures and object-oriented software development, for use
when they become necessary.
•• Python is highly interactive. Expressions and statements can be entered at an interpret-
er’s prompts to allow the programmer to try out experimental code and receive immedi-
ate feedback. Longer code segments can then be composed and saved in script files to
be loaded and run as modules or standalone applications.
•• Python is general purpose. In today’s context, this means that the language includes
resources for contemporary applications, including media computing and networks.
•• Python is free and is in widespread use in industry. Students can download Python to
run on a variety of devices. There is a large Python user community, and expertise in
Python programming has great résumé value.

Copyright 2019 Cengage Learning. All Rights Reserved. May not be copied, scanned, or duplicated, in whole or in part. WCN 02-200-203
Copyright 2019 Cengage Learning. All Rights Reserved. May not be copied, scanned, or duplicated, in whole or in part. Due to electronic rights, some third party content may be suppressed from the eBook and/or eChapter(s).
Editorial review has deemed that any suppressed content does not materially affect the overall learning experience. Cengage Learning reserves the right to remove additional content at any time if subsequent rights restrictions require it.
Organization of the Book pr e f a c e

To summarize these benefits, Python is a comfortable and flexible vehicle for expressing
ideas about computation, both for beginners and for experts. If students learn these ideas
well in the first course, they should have no problems making a quick transition to other
languages needed for courses later in the curriculum. Most importantly, beginning students
will spend less time staring at a computer screen and more time thinking about interesting
problems to solve. xv

Organization of the Book


The approach of this text is easygoing, with each new concept introduced only when it is
needed.
Chapter 1 introduces computer science by focusing on two fundamental ideas, algorithms
and information processing. A brief overview of computer hardware and software, followed
by an extended discussion of the history of computing, sets the context for computational
problem solving.
Chapters 2 and 3 cover the basics of problem solving and algorithm development using the
standard control structures of expression evaluation, sequencing, Boolean logic, selection,
and iteration with the basic numeric data types. Emphasis in these chapters is on problem
solving that is both systematic and experimental, involving algorithm design, testing, and
documentation.
Chapters 4 and 5 introduce the use of the strings, text files, lists, and dictionaries. These
data structures are both remarkably easy to manipulate in Python and support some inter-
esting applications. Chapter 5 also introduces simple function definitions as a way of orga-
nizing algorithmic code.
Chapter 6 explores the technique and benefits of procedural abstraction with function
definitions. Top-down design, stepwise refinement, and recursive design with functions are
examined as means of structuring code to solve complex problems. Details of namespace
organization (parameters, temporary variables, and module variables) and communica-
tion among software components are discussed. A section on functional programming
with higher-order functions shows how to exploit functional design patterns to simplify
solutions.
Chapter 7 focuses on the use of existing objects and classes to compose programs. ­Special
attention is paid to the application programming interface (API), or set of methods, of
a class of objects and the manner in which objects cooperate to solve problems. This
­chapter also introduces two contemporary applications of computing, graphics and
image ­processing—areas in which object-based programming is particularly useful.
Chapter 8 introduces the definition of new classes to construct graphical user interfaces
(GUIs). The chapter contrasts the event-driven model of GUI programs with the process-
driven model of terminal-based programs. The creation and layout of GUI components
are explored, as well as the design of GUI-based applications using the model/view pattern.
The initial approach to defining new classes in this chapter is unusual for an introductory

Copyright 2019 Cengage Learning. All Rights Reserved. May not be copied, scanned, or duplicated, in whole or in part. WCN 02-200-203
Copyright 2019 Cengage Learning. All Rights Reserved. May not be copied, scanned, or duplicated, in whole or in part. Due to electronic rights, some third party content may be suppressed from the eBook and/or eChapter(s).
Editorial review has deemed that any suppressed content does not materially affect the overall learning experience. Cengage Learning reserves the right to remove additional content at any time if subsequent rights restrictions require it.
P r e f a c e Special Features

textbook: students learn that the easiest way to define a new class is to customize an exist-
ing class using subclassing and inheritance.
Chapter 9 continues the exploration of object-oriented design with the definition of entirely
new classes. Several examples of simple class definitions from different application domains
are presented. Some of these are then integrated into more realistic applications, to show
xvi how object-oriented software components can be used to build complex systems. Emphasis
is on designing appropriate interfaces for classes that exploit polymorphism.
Chapter 10 covers advanced material related to several important areas of computing:
concurrent programming, networks, and client/server applications. This chapter thus
gives students challenging experiences near the end of the first course. Chapter 10 intro-
duces multithreaded programs and the construction of simple network-based client/server
applications.
Chapter 11 covers some topics addressed at the beginning of a traditional CS2 course. This
chapter introduces complexity analysis with big-O notation. Enough material is presented
to enable you to perform simple analyses of the running time and memory usage of algo-
rithms and data structures, using search and sort algorithms as examples.

Special Features
This book explains and develops concepts carefully, using frequent examples and diagrams.
New concepts are then applied in complete programs to show how they aid in solving prob-
lems. The chapters place an early and consistent emphasis on good writing habits and neat,
readable documentation.
The book includes several other important features:
•• Case studies—These present complete Python programs ranging from the simple to
the substantial. To emphasize the importance and usefulness of the software develop-
ment life cycle, case studies are discussed in the framework of a user request, followed
by analysis, design, implementation, and suggestions for testing, with well-defined tasks
performed at each stage. Some case studies are extended in end-of-chapter program-
ming projects.
•• Chapter objectives and chapter summaries—Each chapter begins with a set of learning
objectives and ends with a summary of the major concepts covered in the chapter.
•• Key terms and a glossary—When a technical term is introduced in the text, it appears in
boldface. Definitions of the key terms are also collected in a glossary.
•• Exercises—Most major sections of each chapter end with exercise questions that rein-
force the reading by asking basic questions about the material in the section. Each chap-
ter ends with a set of review exercises.
•• Programming projects—Each chapter ends with a set of programming projects of vary-
ing difficulty.

Copyright 2019 Cengage Learning. All Rights Reserved. May not be copied, scanned, or duplicated, in whole or in part. WCN 02-200-203
Copyright 2019 Cengage Learning. All Rights Reserved. May not be copied, scanned, or duplicated, in whole or in part. Due to electronic rights, some third party content may be suppressed from the eBook and/or eChapter(s).
Editorial review has deemed that any suppressed content does not materially affect the overall learning experience. Cengage Learning reserves the right to remove additional content at any time if subsequent rights restrictions require it.
Instructor Resources pr e f a c e

•• A software toolkit for image processing—This book comes with an open-source


Python toolkit for the easy image processing discussed in Chapter 7. The toolkit can be
obtained from the student downloads page on www.cengage.com, or at http://home.wlu
.edu/~lambertk/python/
•• A software toolkit for GUI programming—This book comes with an open-source
Python toolkit for the easy GUI programming introduced in Chapter 8. The toolkit can xvii
be obtained from the student downloads page on www.cengage.com, or at http://home
.wlu.edu/~lambertk/breezypythongui/
•• Appendices—Four appendices include information on obtaining Python resources,
installing the toolkits, and using the toolkits’ interfaces.

New in This Edition


The most obvious change in this edition is the addition of full color. All program examples
include the color coding used in Python’s IDLE, so students can easily identify program
elements such as keywords, program comments, and function, method, and class names.
Several new figures have been added to illustrate concepts, and many exercises and pro-
gramming projects have been reworked. The brief history of computing in Chapter 1 has
been brought up to date. A discussion of a Grid type has been included to give students
exposure to a two-dimensional data structure. The book remains the only introductory
Python text with a thorough introduction to realistic GUI programming. The chapter
on GUIs (Chapter 8) now uses the breezypythongui toolkit to ease the introduction of
this topic. The chapter on GUIs has also been placed ahead of the chapter on design with
classes (Chapter 9). This arrangement allows students to explore the customizing of exist-
ing classes with GUI programming before they tackle the design of entirely new classes in
the following chapter. Finally, a new section on the readers and writers problem has been
added to Chapter 10, to illustrate thread-safe access to shared resources.

Instructor Resources
MindTap
MindTap activities for Fundamentals of Python: First Programs are designed to help stu-
dents master the skills they need in today’s workforce. Research shows employers need
critical thinkers, troubleshooters, and creative problem-solvers to stay relevant in our
fast-paced, technology-driven world. MindTap helps you achieve this with assignments
and activities that provide hands-on practice and real-life relevance. Students are guided
through assignments that help them master basic knowledge and understanding before
moving on to more challenging problems.
All MindTap activities and assignments are tied to defined unit learning objectives.
­Hands-on coding labs provide real-life application and practice. Readings and dynamic
visualizations support the lecture, while a post-course assessment measures exactly how

Copyright 2019 Cengage Learning. All Rights Reserved. May not be copied, scanned, or duplicated, in whole or in part. WCN 02-200-203
Copyright 2019 Cengage Learning. All Rights Reserved. May not be copied, scanned, or duplicated, in whole or in part. Due to electronic rights, some third party content may be suppressed from the eBook and/or eChapter(s).
Editorial review has deemed that any suppressed content does not materially affect the overall learning experience. Cengage Learning reserves the right to remove additional content at any time if subsequent rights restrictions require it.
P r e f a c e We Appreciate Your Feedback

much a student has learned. MindTap provides the analytics and reporting to easily see
where the class stands in terms of progress, engagement, and completion rates. Use the
content and learning path as-is or pick-and-choose how our materials will wrap around
yours. You control what the students see and when they see it. Learn more at http://www
.cengage.com/mindtap/.
xviii

Instructor Companion Site


The following teaching tools are available for download at the Companion Site for this text.
Simply search for this text at www.cengagebrain.com and choose "Instructor Downloads."
An instructor login is required.
•• Instructor’s Manual: The Instructor’s Manual that accompanies this textbook includes
additional instructional material to assist in class preparation, including items such as
Overviews, Chapter Objectives, Teaching Tips, Quick Quizzes, Class Discussion Top-
ics, Additional Projects, Additional Resources, and Key Terms. A sample syllabus is also
available.
•• Test Bank: Cengage Testing Powered by Cognero is a flexible, online system that allows
you to:
•• author, edit, and manage test bank content from multiple Cengage solutions
•• create multiple test versions in an instant
•• deliver tests from your LMS, your classroom, or wherever you want
•• PowerPoint Presentations: This text provides PowerPoint slides to accompany each
chapter. Slides may be used to guide classroom presentations, to make available to stu-
dents for chapter review, or to print as classroom handouts. Files are provided for every
figure in the text. Instructors may use the files to customize PowerPoint slides, illustrate
quizzes, or create handouts.
•• Solutions: Solutions to all programming exercises are available. If an input file is
needed to run a programming exercise, it is included with the solution file.
•• Source Code: The source code is available at www.cengagebrain.com. If an input file is
needed to run a program, it is included with the source code.

We Appreciate Your Feedback


We have tried to produce a high-quality text, but should you encounter any errors,
please report them to lambertk@wlu.edu or http://support.cengage.com. A list of errata,
should they be found, as well as other information about the book, will be posted on
the Web site http://home.wlu.edu/~lambertk/python/ and with the student resources at
www.cengagebrain.com.

Copyright 2019 Cengage Learning. All Rights Reserved. May not be copied, scanned, or duplicated, in whole or in part. WCN 02-200-203
Copyright 2019 Cengage Learning. All Rights Reserved. May not be copied, scanned, or duplicated, in whole or in part. Due to electronic rights, some third party content may be suppressed from the eBook and/or eChapter(s).
Editorial review has deemed that any suppressed content does not materially affect the overall learning experience. Cengage Learning reserves the right to remove additional content at any time if subsequent rights restrictions require it.
Dedication pr e f a c e

Acknowledgments
I would like to thank my contributing author, Martin Osborne, for many years of advice,
friendly criticism, and encouragement on several of my book projects. I am also grateful
to the many students and colleagues at Washington and Lee University who have used this
book and given helpful feedback on it over the life of the first edition.
xix
In addition, I would like to thank the following reviewers for the time and effort they
contributed to Fundamentals of Python: Steven Robinett, Great Falls College Montana
State University; Mark Williams, University of Maryland Eastern Shore; Andrew ­Danner,
­Swarthmore College; Susan Fox, Macalester College; Emily Shepard, Central Carolina
Community College.
Also, thank you to the individuals at Cengage who helped to assure that the content of
all data and solution files used for this text were correct and accurate: John Freitas, MQA
­Project Leader, and Danielle Shaw, MQA Tester.
Finally, thanks to several other people whose work made this book possible: Kate Mason,
Associate Product Manager, Cengage; Natalie Pashoukos, Senior Content Developer,
­Cengage; and Jennifer Feltri-George, Senior Content Project Manager, Cengage. I also
want to thank Scarlett Lindsay for her superb copyediting of the book and Chandrasekar
­Subramanian for an excellent job managing the paging of the project.

Dedication
To my good friends, Lesley and David Novack
Kenneth A. Lambert
Lexington, VA

Copyright 2019 Cengage Learning. All Rights Reserved. May not be copied, scanned, or duplicated, in whole or in part. WCN 02-200-203
Copyright 2019 Cengage Learning. All Rights Reserved. May not be copied, scanned, or duplicated, in whole or in part. Due to electronic rights, some third party content may be suppressed from the eBook and/or eChapter(s).
Editorial review has deemed that any suppressed content does not materially affect the overall learning experience. Cengage Learning reserves the right to remove additional content at any time if subsequent rights restrictions require it.
Copyright 2019 Cengage Learning. All Rights Reserved. May not be copied, scanned, or duplicated, in whole or in part. WCN 02-200-203
Copyright 2019 Cengage Learning. All Rights Reserved. May not be copied, scanned, or duplicated, in whole or in part. Due to electronic rights, some third party content may be suppressed from the eBook and/or eChapter(s).
Editorial review has deemed that any suppressed content does not materially affect the overall learning experience. Cengage Learning reserves the right to remove additional content at any time if subsequent rights restrictions require it.
Chapter 1
Introduction

After completing this chapter, you will be able to

Describe the basic features of an algorithm


Explain how hardware and software collaborate in
a ­computer’s architecture
Summarize a brief history of computing
Compose and run a simple Python program

Copyright 2019 Cengage Learning. All Rights Reserved. May not be copied, scanned, or duplicated, in whole or in part. WCN 02-200-203
Copyright 2019 Cengage Learning. All Rights Reserved. May not be copied, scanned, or duplicated, in whole or in part. Due to electronic rights, some third party content may be suppressed from the eBook and/or eChapter(s).
Editorial review has deemed that any suppressed content does not materially affect the overall learning experience. Cengage Learning reserves the right to remove additional content at any time if subsequent rights restrictions require it.
Chapter 1 Introduction

As a reader of this book, you almost certainly have played a video game and listened to
digital music. It’s likely that you have watched a digital movie after preparing a snack in a
microwave oven. Chances are that today you will make a phone call, send or receive a text
message, take a photo, or consult your favorite social network on a cell phone. You and your
friends have most likely used a desktop computer or a laptop computer to do some signifi-
2
cant coursework in high school or college.
These activities rely on something in common: computer technology. Computer technol-
ogy is almost everywhere, not only in our homes but also in our schools and in the places
where we work and play. Computer technology plays an important role in entertainment,
education, medicine, manufacturing, communications, government, and commerce. It
has been said that we have digital lifestyles and that we live in an information age with an
information-based economy. Some people even claim that nature itself performs computa-
tions on information structures present in DNA and in the relationships among subatomic
particles.
It’s difficult to imagine our world without computation, although we don’t think about the
actual computers very much. It’s also hard to imagine that the human race did without
computer technology for thousands of years, and that computer technology has pervaded
the world as we know it for only the past 30 years or so.
In the following chapters, you will learn about computer science, which is the study of com-
putation that has made this new technology and this new world possible. You will also learn
how to use computers effectively and appropriately to enhance your own life and the lives
of others.

Two Fundamental Ideas of Computer Science:


­Algorithms and Information Processing
Like most areas of study, computer science focuses on a broad set of interrelated ideas.
Two of the most basic ones are algorithms and information processing. In this section,
these ideas are introduced in an informal way. We will examine them in more detail
in later chapters.

Algorithms
People computed long before the invention of modern computing devices, and many con-
tinue to use computing devices that we might consider primitive. For example, consider
how merchants made change for customers in marketplaces before the existence of credit
cards, pocket calculators, or cash registers. Making change can be a complex activity. It
probably took you some time to learn how to do it, and it takes some mental effort to get it
right every time. Let’s consider what’s involved in this process.
According to one method, the first step is to compute the difference between the pur-
chase price and the amount of money that the customer gives the merchant. The result of

Copyright 2019 Cengage Learning. All Rights Reserved. May not be copied, scanned, or duplicated, in whole or in part. WCN 02-200-203
Copyright 2019 Cengage Learning. All Rights Reserved. May not be copied, scanned, or duplicated, in whole or in part. Due to electronic rights, some third party content may be suppressed from the eBook and/or eChapter(s).
Editorial review has deemed that any suppressed content does not materially affect the overall learning experience. Cengage Learning reserves the right to remove additional content at any time if subsequent rights restrictions require it.
Two Fundamental Ideas of Computer Science

this calculation is the total amount that the merchant must return to the purchaser. For
example, if you buy a dozen eggs at the farmers’ market for $2.39 and you give the farmer a
$10 bill, she should return $7.61 to you. To produce this amount, the merchant selects the
appropriate coins and bills that, when added to $2.39, make $10.00.
According to another method, the merchant starts with the purchase price and goes toward
the amount given. First, coins are selected to bring the price to the next dollar amount (in 3
this case, $0.61 5 3 dimes, 1 nickel, and 4 pennies), then dollars are selected to bring the
price to the next 5-dollar amount (in this case, $2), and then, in this case, a $5 bill completes
the transaction. As you will see in this book, there can be many possible methods or algo-
rithms that solve the same problem, and the choice of the best one is a skill you will acquire
with practice.
Few people can subtract three-digit numbers without resorting to some manual aids,
such as pencil and paper. As you learned in grade school, you can carry out subtraction
with pencil and paper by following a sequence of well-defined steps. You have probably
done this many times but never made a list of the specific steps involved. Making such
lists to solve problems is something computer scientists do all the time. For example, the
following list of steps describes the process of subtracting two numbers using a pencil
and paper:
Step 1 Write down the two numbers, with the larger number above the smaller num-
ber and their digits aligned in columns from the right.
Step 2 Assume that you will start with the rightmost column of digits and work your
way left through the various columns.
Step 3 Write down the difference between the two digits in the current column
of digits, borrowing a 1 from the top number’s next column to the left if
necessary.
Step 4 If there is no next column to the left, stop. Otherwise, move to the next col-
umn to the left, and go back to Step 3.
If the computing agent (in this case a human being) follows each of these simple steps cor-
rectly, the entire process results in a correct solution to the given problem. We assume in
Step 3 that the agent already knows how to compute the difference between the two digits
in any given column, borrowing if necessary.
To make change, most people can select the combination of coins and bills that represent
the correct change amount without any manual aids, other than the coins and bills. But the
mental calculations involved can still be described in a manner similar to the preceding
steps, and we can resort to writing them down on paper if there is a dispute about the cor-
rectness of the change.
The sequence of steps that describes each of these computational processes is called an
algorithm. Informally, an algorithm is like a recipe. It provides a set of instructions that
tells us how to do something, such as make change, bake bread, or put together a piece of
furniture. More precisely, an algorithm describes a process that ends with a solution to a

Copyright 2019 Cengage Learning. All Rights Reserved. May not be copied, scanned, or duplicated, in whole or in part. WCN 02-200-203
Copyright 2019 Cengage Learning. All Rights Reserved. May not be copied, scanned, or duplicated, in whole or in part. Due to electronic rights, some third party content may be suppressed from the eBook and/or eChapter(s).
Editorial review has deemed that any suppressed content does not materially affect the overall learning experience. Cengage Learning reserves the right to remove additional content at any time if subsequent rights restrictions require it.
Chapter 1 Introduction

problem. The algorithm is also one of the fundamental ideas of computer science. An algo-
rithm has the following features:
1. An algorithm consists of a finite number of instructions.
2. Each individual instruction in an algorithm is well defined. This means that the
4 action described by the instruction can be performed effectively or be executed
by a computing agent. For example, any computing agent capable of arithmetic can
compute the difference between two digits. So an algorithmic step that says “com-
pute the difference between two digits” would be well defined. On the other hand,
a step that says “divide a number by 0” is not well defined, because no computing
agent could carry it out.
3. An algorithm describes a process that eventually halts after arriving at a solution to
a problem. For example, the process of subtraction halts after the computing agent
writes down the difference between the two digits in the leftmost column of digits.
4. An algorithm solves a general class of problems. For example, an algorithm that
describes how to make change should work for any two amounts of money whose
difference is greater than or equal to $0.00.
Creating a list of steps that describe how to make change might not seem like a major
accomplishment to you. But the ability to break a task down into its component parts is one
of the main jobs of a computer programmer. Once we write an algorithm to describe a par-
ticular type of computation, we can build a machine to do the computing. Put another way,
if we can develop an algorithm to solve a problem, we can automate the task of solving the
problem. You might not feel compelled to write a computer program to automate the task
of making change, because you can probably already make change yourself fairly easily. But
suppose you needed to do a more complicated task—such as sorting a list of 100 names. In
that case, a computer program would be very handy.
Computers can be designed to run a small set of algorithms for performing specialized tasks
such as operating a microwave oven. But we can also build computers, like the one on your
desktop, that are capable of performing a task described by any algorithm. These computers
are truly general-purpose problem-solving machines. They are unlike any machines we have
ever built before, and they have formed the basis of the completely new world in which we live.
Later in this book, we introduce a notation for expressing algorithms and some suggestions
for designing algorithms. You will see that algorithms and algorithmic thinking are critical
underpinnings of any computer system.

Information Processing
Since human beings first learned to write several thousand years ago, they have pro-
cessed information. Information itself has taken many forms in its history, from the marks
impressed on clay tablets in ancient Mesopotamia; to the first written texts in ancient

Copyright 2019 Cengage Learning. All Rights Reserved. May not be copied, scanned, or duplicated, in whole or in part. WCN 02-200-203
Copyright 2019 Cengage Learning. All Rights Reserved. May not be copied, scanned, or duplicated, in whole or in part. Due to electronic rights, some third party content may be suppressed from the eBook and/or eChapter(s).
Editorial review has deemed that any suppressed content does not materially affect the overall learning experience. Cengage Learning reserves the right to remove additional content at any time if subsequent rights restrictions require it.
Two Fundamental Ideas of Computer Science

Greece; to the printed words in the books, newspapers, and magazines mass-produced
since the European Renaissance; to the abstract symbols of modern mathematics and sci-
ence used during the past 350 years. Only recently, however, have human beings developed
the capacity to automate the processing of information by building computers. In the
modern world of computers, information is also commonly referred to as data. But what is
information? 5
Like mathematical calculations, information processing can be described with algorithms.
In our earlier example of making change, the subtraction steps involved manipulating sym-
bols used to represent numbers and money. In carrying out the instructions of any algo-
rithm, a computing agent manipulates information. The computing agent starts with some
given information (known as input), transforms this information according to well-defined
rules, and produces new information, known as output.
It is important to recognize that the algorithms that describe information processing can
also be represented as information. Computer scientists have been able to represent algo-
rithms in a form that can be executed effectively and efficiently by machines. They have
also designed real machines, called electronic digital computers, which are capable of exe-
cuting algorithms.
Computer scientists more recently discovered how to represent many other things, such as
images, music, human speech, and video, as information. Many of the media and commu-
nication devices that we now take for granted would be impossible without this new kind
of information processing. We examine many of these achievements in more detail in later
chapters.

Exercises
These short end-of-section exercises are intended to stimulate your thinking about
computing.

1. List three common types of computing agents.


2. Write an algorithm that describes the second part of the process of making change
(counting out the coins and bills).
3. Write an algorithm that describes a common task, such as baking a cake or operat-
ing a DVD player.
4. Describe an instruction that is not well defined and thus could not be included as a
step in an algorithm. Give an example of such an instruction.
5. In what sense is a laptop computer a general-purpose problem-solving machine?
6. List four devices that use computers and describe the information that they process.
(Hint: Think of the inputs and outputs of the devices.)

Copyright 2019 Cengage Learning. All Rights Reserved. May not be copied, scanned, or duplicated, in whole or in part. WCN 02-200-203
Copyright 2019 Cengage Learning. All Rights Reserved. May not be copied, scanned, or duplicated, in whole or in part. Due to electronic rights, some third party content may be suppressed from the eBook and/or eChapter(s).
Editorial review has deemed that any suppressed content does not materially affect the overall learning experience. Cengage Learning reserves the right to remove additional content at any time if subsequent rights restrictions require it.
Chapter 1 Introduction

The Structure of a Modern Computer System


We now give a brief overview of the structure of modern computer systems. A modern
computer system consists of hardware and software. Hardware consists of the physical
devices required to execute algorithms. Software is the set of these algorithms, represented
as programs, in particular programming languages. In the discussion that follows, we
6 focus on the hardware and software found in a typical desktop computer system, although
similar components are also found in other computer systems, such as handheld devices
and ATMs (automatic teller machines).

Computer Hardware
The basic hardware components of a computer are memory, a central processing unit
(CPU), and a set of input/output devices, as shown in Figure 1-1.

Input device Output device

Memory

CPU

Figure 1-1 Hardware components of a modern computer system

Human users primarily interact with the input and output devices. The input devices
include a keyboard, a mouse, a trackpad, a microphone, and a touchscreen. Common out-
put devices include a monitor and speakers. Computers can also communicate with the
external world through various ports that connect them to networks and to other devices
such as smartphones and digital cameras. The purpose of most input devices is to convert
information that human beings deal with, such as text, images, and sounds, into informa-
tion for computational processing. The purpose of most output devices is to convert the
results of this processing back to human-usable form.
Computer memory is set up to represent and store information in electronic form. Specifi-
cally, information is stored as patterns of binary digits (1s and 0s). To understand how this
works, consider a basic device such as a light switch, which can only be in one of two states,
on or off. Now suppose there is a bank of switches that control 16 small lights in a row. By
turning the switches off or on, we can represent any pattern of 16 binary digits (1s and 0s)
as patterns of lights that are on or off. As we will see later in this book, computer scientists
have discovered how to represent any information, including text, images, and sound, in
binary form.
Copyright 2019 Cengage Learning. All Rights Reserved. May not be copied, scanned, or duplicated, in whole or in part. WCN 02-200-203
Copyright 2019 Cengage Learning. All Rights Reserved. May not be copied, scanned, or duplicated, in whole or in part. Due to electronic rights, some third party content may be suppressed from the eBook and/or eChapter(s).
Editorial review has deemed that any suppressed content does not materially affect the overall learning experience. Cengage Learning reserves the right to remove additional content at any time if subsequent rights restrictions require it.
The Structure of a Modern Computer System

Now, suppose there are 8 of these groups of 16 lights. We can select any group of lights and
examine or change the state of each light within that collection. We have just developed a
tiny model of computer memory. The memory has 8 cells, each of which can store 16 bits
of binary information. A diagram of this model, in which the memory cells are filled with
binary digits, is shown in Figure 1-2. This memory is also sometimes called primary or
internal or random access memory (RAM).
7

Cell 7 1 1 0 1 1 1 1 0 1 1 1 1 1 1 0 1
Cell 6 1 0 1 1 0 1 1 1 1 1 1 0 1 1 1 1
Cell 5 1 1 1 1 1 1 1 1 0 1 1 1 1 0 1 1
Cell 4 1 0 1 1 1 0 1 1 1 1 1 1 0 1 1 1
Cell 3 1 1 1 0 1 1 1 1 1 0 1 1 1 1 1 1
Cell 2 0 0 1 1 1 1 0 1 1 1 0 1 1 1 0 1
Cell 1 1 1 1 0 1 1 1 1 1 1 1 1 1 0 1 1
Cell 0 1 1 1 0 1 1 0 1 1 1 1 1 1 1 1 0

Figure 1-2 A model of computer memory

The information stored in memory can represent any type of data, such as numbers, text,
images, or sound, or the instructions of a program. We can also store in memory an algorithm
encoded as binary instructions for the computer. Once the information is stored in memory, we
typically want to do something with it—that is, we want to process it. The part of a computer
that is responsible for processing data is the central processing unit (CPU). This device, which
is also sometimes called a processor, consists of electronic switches arranged to perform sim-
ple logical, arithmetic, and control operations. The CPU executes an algorithm by fetching its
binary instructions from memory, decoding them, and executing them. Executing an instruc-
tion might involve fetching other binary information—the data—from memory as well.
The processor can locate data in a computer’s primary memory very quickly. However, these
data exist only as long as electric power comes into the computer. If the power fails or is turned
off, the data in primary memory are lost. Clearly, a more permanent type of memory is needed
to preserve data. This more permanent type of memory is called external or s­ econdary
­memory, and it comes in several forms. Magnetic storage media, such as tapes and hard
disks, allow bit patterns to be stored as patterns on a magnetic field. Semiconductor storage
media, such as flash memory sticks, perform much the same function with a different technol-
ogy, as do optical storage media, such as CDs and DVDs. Some of these secondary storage
media can hold much larger quantities of information than the internal memory of a computer.

Computer Software
You have learned that a computer is a general-purpose problem-solving machine. To
solve any computable problem, a computer must be capable of executing any algorithm.
Because it is impossible to anticipate all of the problems for which there are ­algorithmic
solutions, there is no way to “hardwire” all potential algorithms into a computer’s
Copyright 2019 Cengage Learning. All Rights Reserved. May not be copied, scanned, or duplicated, in whole or in part. WCN 02-200-203
Copyright 2019 Cengage Learning. All Rights Reserved. May not be copied, scanned, or duplicated, in whole or in part. Due to electronic rights, some third party content may be suppressed from the eBook and/or eChapter(s).
Editorial review has deemed that any suppressed content does not materially affect the overall learning experience. Cengage Learning reserves the right to remove additional content at any time if subsequent rights restrictions require it.
Chapter 1 Introduction

hardware. Instead, we build some basic operations into the hardware’s processor and
require any algorithm to use them. The algorithms are converted to binary form and then
loaded, with their data, into the computer’s memory. The processor can then execute the
algorithms’ instructions by running the hardware’s more basic operations.
Any programs that are stored in memory so that they can be executed later are called soft-
8 ware. A program stored in computer memory must be represented in binary digits, which
is also known as machine code. Loading machine code into computer memory one digit at
a time would be a tedious, error-prone task for human beings. It would be convenient if we
could automate this process to get it right every time. For this reason, computer scientists
have developed another program, called a loader, to perform this task. A loader takes a set
of machine language instructions as input and loads them into the appropriate memory
locations. When the loader is finished, the machine language program is ready to execute.
Obviously, the loader cannot load itself into memory, so this is one of those algorithms that
must be hardwired into the computer.
Now that a loader exists, we can load and execute other programs that make the develop-
ment, execution, and management of programs easier. This type of software is called s­ ystem
software. The most important example of system software is a computer’s o ­ perating system.
You are probably already familiar with at least one of the most popular operating systems,
such as Linux, Apple’s macOS, and Microsoft’s Windows. An operating system is responsible
for managing and scheduling several concurrently running programs. It also manages the
computer’s memory, including the external storage, and manages communications between
the CPU, the input/output devices, and other computers on a network. An important part
of any operating system is its file system, which allows human users to organize their data
and programs in permanent storage. Another important function of an operating system is
to provide user interfaces—that is, ways for the human user to interact with the computer’s
software. A terminal-based interface accepts inputs from a keyboard and displays text out-
put on a monitor screen. A graphical user interface (GUI) organizes the monitor screen
around the metaphor of a desktop, with windows containing icons for folders, files, and appli-
cations. This type of user interface also allows the user to manipulate images with a pointing
device such as a mouse. A touchscreen interface supports more direct manipulation of
these visual elements with gestures such as pinches and swipes of the user’s fingers. Devices
that respond verbally and in other ways to verbal commands are also becoming widespread.
Another major type of software is called applications software, or simply apps. An
­application is a program that is designed for a specific task, such as editing a document or
displaying a Web page. Applications include Web browsers, word processors, spreadsheets,
database managers, graphic design packages, music production systems, and games, among
millions of others. As you begin learning to write computer programs, you will focus on
writing simple applications.
As you have learned, computer hardware can execute only instructions that are written in
binary form—that is, in machine language. Writing a machine language program, however,
would be an extremely tedious, error-prone task. To ease the process of writing computer
programs, computer scientists have developed high-level programming languages for
expressing algorithms. These languages resemble English and allow the author to express
algorithms in a form that other people can understand.
Copyright 2019 Cengage Learning. All Rights Reserved. May not be copied, scanned, or duplicated, in whole or in part. WCN 02-200-203
Copyright 2019 Cengage Learning. All Rights Reserved. May not be copied, scanned, or duplicated, in whole or in part. Due to electronic rights, some third party content may be suppressed from the eBook and/or eChapter(s).
Editorial review has deemed that any suppressed content does not materially affect the overall learning experience. Cengage Learning reserves the right to remove additional content at any time if subsequent rights restrictions require it.
Another Random Scribd Document
with Unrelated Content
The needle was well over the hundred mark and was still rising.
"Come, colonel." Hooking her arm in his, Nedra began moving down
the rough, boulder-strewn trail. Zen did not move. She tugged
harder.
"Your life is in danger here, sir," the craggy man said, politely.
"That is of interest to me only," Zen answered. "And what about
your life?"
"Colonel, I'd like you to meet a friend of mine," the nurse said
quickly. "Colonel Zen, Sam West. We'll talk while we walk down to
the first aid station."
"A pleasure to meet you, sir," West said, extending his hand. His
handclasp was firm but there was a suggestion of additional power
in his fingers.
"Nice to meet you, Mr. West. Do you live around here?"
"Over that way," the craggy man said, nodding vaguely over his
shoulder.
Again the nurse tugged at Zen's arm. He set his feet solidly on the
mountain trail. "We'll talk right here."
"But you are taking an unfair advantage of Nedra," the craggy man
protested. "This area is heavy with radiation and this is neither the
time nor the place to be swapping horses."
"Then why are you two here?"
"I was getting out of the area as fast as I could when I met Nedra,"
West said. "I would still be getting out of it, but fast, if you were not
stopping me."
"I'm not stopping you," Zen said. "There's the trail. Hit it. Nor you
either," he said to Nedra.
"Don't be silly, Kurt," the nurse said. She was pleading with him now.
"All right. But on one condition. Why did you come up here in the
first place? You knew the area was hot."
"I—I lost my head," the nurse said promptly. "My emotions ran away
with me. I'm a nurse and wounded men needed my attention. I
went to them. You will come down the trail with us, won't you?" The
violet eyes begged him to believe in her.
"What made you lose your head?"
"Why—shock, I suppose. This is the first time I was bombed. Also,
the screaming of the wounded. Really, sir, I am a nurse." The way
she said the word, being a nurse meant something. The violet eyes
had grown tired of begging and were on the verge of spitting anger
at him.
"I don't believe a damned word you have said," Zen said. "You didn't
lose your head back there in the prospect hole."
"Please, Kurt." Again she rugged at his arm. "I'll talk to you all you
want down below. But don't try to force me to stay here."
Reluctantly, Zen yielded to the pressure on his arm. Relief appeared
in the violet eyes and the face of the craggy man showed a sudden
release from some inner strain. Dimly, he thought he had seen that
craggy face somewhere before but the picture that flicked through
his mind was gone before he could fit a time and place tag on it.
Going down the trail, he steered the nurse toward a truck where the
medics had set up equipment to test the amount of exposure to
radiation. In doing this, he discovered that she was steering him in
the same direction.
"I don't need the medics," he protested. "I'm all right. I wasn't
exposed long enough to do any damage."
"Of course you're all right," she answered. Her tone was similar to
that of an indulgent mother reassuring a hurt child.
"You're the one who needs help," he said. He was certain she had
remained too long.
"I'm going to get it if I need it," she said, soothingly.
Zen could hear the occasional crunch of boots behind them. West
was keeping silent. He did not seem to be in a hurry.
Zen started to speak to Nedra. The thought of what he wanted to
say was dim in his mind and he could not quite find words for it but
he knew that it had something to do with a wish that the world were
different and that the human race were not trying to destroy itself.
Why should he be wishing this? The reason for his thinking became
a little clearer. He was wishing the world were different so that he
might make love to this nurse under conditions that would permit
this love to bear other fruit than frustration, despair, and death.
He found himself wishing that a vine-covered cottage existed
somewhere, a place where a man and a woman might live in peace
and reasonable security, raising some kids who could play on a
mountain slope that was not saturated with atomic radiation.
"Here is the first aid station," the nurse said. "And—"
"And what?" he asked her when she did not continue.
She gave his arm a squeeze. "And thank you for the dream," she
whispered.
As Kurt Zen turned startled eyes toward her, wondering how she had
known what he had been dreaming, her face seemed to dissolve in a
gray mist.
He plunged, unconscious, to the ground at her feet.
IV
The jar of striking the ground seemed to bring the intelligence agent
back to consciousness instantly. As Nedra started to kneel beside
him, he was already getting to his feet. She tried to help him rise.
He shrugged her hand away.
"What happened?" she asked.
"Nothing," he said. This didn't seem quite right. "I—I—" He tried to
think what had happened. "I fainted. That's all. I just fainted." To
him, this seemed a reasonable explanation for everything that
needed explaining.
Nedra seemed to think otherwise. "But men like you don't just faint,"
she protested.
"I did."
"They don't faint unless something is wrong with them," Nedra
continued. "Are you sure you're not suffering from delayed shock
following the bomb explosion? Or—" Her voice slid away into silence
as if she were afraid to voice the thought that was in her mind.
Behind her, West said nothing.
"I just did it," Zen said, becoming more indignant. "I fainted. Who
says it can't be done?" Confusion existed somewhere. He was sure it
was the nurse who was confused. He shook his head in an effort to
clear up her difficulty.
"I saw you do it. All I am trying to say is that perhaps there may be
a reason for it."
"Nope," Zen said. "I'm not going to the aid station. No reason for it.
I'm all right. It's the world out there that is wrong." This made sense
to him.
"I know you are all right," Nedra answered. Her face showed strain.
"But it might be a good idea to have the doctors check, just to make
sure."
Zen, busy shaking his head again, hardly heard her. He had the
impression that her confusion would clear up in a minute. Somehow
it reminded him of the confusion that he had suffered after inhaling
a whiff of nerve gas, once. When had this happened? He was not
sure, now. Perhaps it had taken place in the remote past, perhaps
on some other planet ... he realized his mind was wandering. Again
he shook his head.
"But I really think, colonel—"
"I wasn't shaking my head at you," Zen corrected.
"Good. Then we will go see the doctors."
"I didn't mean that either. I was shaking my head to clear it. There's
a fog in it."
"A fog in your head?" Unease appeared in her voice.
"Yes. What's wrong with that? Lots of men have fogs in their heads."
To him, this seemed a reasonable statement. "Lots of men have to
go to the docs every couple of weeks to have the fogs blown out of
their heads." Thinking he had made a joke, he laughed.
Nedra did not think he had said anything funny. Resolutely, she took
his arm. "Come with me, colonel." As she led him toward the truck
which the medics were using for a first aid station, something
happened.
He saw clearly.
He saw everything.
The ability to see came suddenly, out of nowhere. One second it was
not there. Then it was there. It was like seeing with eyes, except it
was better than ocular perception had ever been. With it, he was not
only able to see surfaces, he could also see into the interior of
things. An acute understanding of what he saw went with the
perception.
He saw that the Universe was as tall as a man, and no taller. He saw
that it was as wide as a man, and no wider. He saw that it was as
broad as a man, and no broader.
He saw the human race in its entirety, one man and all men, all men
in one man. Simultaneously, he saw the whole history of the race, he
saw the long journey it had made from so-called inanimate matter to
the point where it was now a creature that looked outward to the
stars. He saw that the destiny of the race lay in those stars, and in
all that vast expanse of space between them, if it did not destroy
itself in the process of growing to star stature. He saw that the race
could do exactly this, that it could blow itself back to the component
atoms that composed it, in which case the long and toilsome, heart-
breaking struggle upward from the atomic level would have to begin
all over again.
He also knew what he was doing with this clear seeing.
He was touching the race mind.
He was in contact with the race field.
His consciousness had been lifted to the level of that vast, all-
pervading, but very subtle force field that comprised the race mind.
The knowledge was sudden agony in him, a pain that was needle
sharp in the region of his heart. The pain was strange because,
while he could feel it and knew it was happening in his body, it had
no meaning to him. He was detached from it, it hurt his body, but it
did not hurt or harm him.
His body was alarmed by the pain, his breathing quickened, and a
faint trace of sweat appeared on his skin. But he was not alarmed.
Even if his body fell dead, he would not be concerned.
"What is it, Kurt?" his ears heard Nedra say. She had detected his
heavy breathing and she was alarmed. "Are you about to faint
again?"
"No," his lips answered. His body laughed at the question. He heard
the sound of his laughter as being both his and not his. His body
knew it was not going to faint. His laughter sounded hollow and out
of place but he did not care about that either.
Ahead, soldiers were lined up at the back end of the truck, waiting
their turn in line.
"Your rank entitles you to priority," Nedra said hesitantly.
"In the place where I am now, my rank doesn't exist," he answered.
"I join the end of the line, I take my turn." He was quite stubborn
about this.
The nurse looked pleased. He wondered if he had said something
important. To him, what he had said seemed obvious. Behind him,
West was a silent shadow wrapped in an enigma. Even with his
sudden new perception, his contact with a higher form of
consciousness, he could not perceive West clearly. Something about
the craggy man defied penetration and analysis.
The men in the line ahead of him waited for their turn, shuffling
forward each time the medics finished with their examination. There
was no talk in the line. Not a man grumbled, not a man complained.
Knowing men, Zen knew that this was ominous.
These men had had it. They knew they had had it. In the face of
that knowledge, nothing else mattered. Outwardly, they looked fit.
Inwardly, something had happened to them. It seemed to Zen that
he could see glows coming from their bodies. One was swaying. Zen
seemed to glimpse a blob of light moving suddenly upward from the
man. The soldier fell. He did not move a muscle after he hit.
Nedra started toward him. Zen shook his head. "No use," he said.
"Why not?"
Zen pointed skyward. "He went that way."
Her face whitened as she caught his meaning. "I'll make sure."
She moved forward and inspected the fallen man, felt for a pulse,
and felt again, then got to her feet. As she returned, her back
seemed to have acquired a new sag.
An officer shouted from the truck, his voice gravel rough from
tension. In response, a stretcher-bearing detail moved forward. They
inspected the body of the fallen man, then lifted it and tossed it to
the side of the trail. One clipped a dog tag from it, then ran a
counter over it. He grunted to his companion, who tied a red tag on
the dead man's wrist.
"Up that way, boys, you can find some more," Zen called to them,
jerking his thumb up the slope.
"We're not a burial detail," was the answer.
The soldiers in the line shuffled forward.
"Hey! It's gone!" Zen said suddenly.
"What's gone?"
"I'm back," Zen said.
"You never went anywhere," the nurse said.
"It's gone and I'm back both mean the same thing," he tried to
explain. "The thing that is gone is my contact with the race field. I'm
back means that all of a sudden, I'm normal. I'm back here. I'm
looking out of my eyes. I'm hearing with my ears. I don't know
everything any longer."
Daze was in him. Worse than the daze was the fact that even the
memory of the experience was receding. Agony came with this
recession. It seemed to him that this experience was the most
important thing that had ever happened to him.
And it was going away. He watched it slide out of his memory. He
felt like running wildly to try and recapture it. Which way he would
run did not matter, just so he ran until he found it again. He fought
the impulse to run. The experience was not out there; it could not
be found if he searched the whole world for it.
It was inside him.
Nedra looked at West and started to speak, but the craggy man
motioned her to silence.
"Saul on the road to Damascus," Zen muttered. "Something like this
happened to Saul on the road to Damascus."
"Kurt—" Nedra said. Again the craggy man motioned her to silence.
The fellow, rough mountaineer that he was, seemed to have some
perception of the turmoil inside a fellow human being, and more
than that, to have understanding and sympathy.
"I contacted the race mind," Zen said. "For a minute, I was in touch
with the field of the race. But it's gone now," he added. Sadness and
a falling voice went with the last words.
"Step in front of the scope, soldier," a gravel voice growled behind
him. Turning, he saw that he was next in line. The lieutenant in
charge of the first aid station had spoken to him. Seeing the eagle
on Zen's helmet he hastily apologized. "I beg your pardon, sir."
"It's all right," Zen said. For an instant, as conflicting ideas competed
for expression in him, he wondered who he was and why he was
here. Then he remembered what had happened. Well established
reaction patterns took over and he stepped into position in front of
the scope. Inside the back end of the truck, a transformer hummed.
Although he could not feel it, he knew that a powerful stream of
radiation was passing through his body and that a count was being
made of the radioactivity he had absorbed. The lieutenant studied
his meters, then looked up at Zen.
"You're all right, sir." He seemed puzzled.
"Not hot, eh?"
"No, sir, you're not. Frankly, I don't understand it. Oh, you've got a
little exposure, but nothing serious."
"I was in one of the old mines when the blast went off," Zen
explained.
"Then that accounts for it. You were lucky as hell, sir. Next."
Catching Nedra's arm, Zen swung her in front of the scope. The
experience with higher levels of consciousness had been forced out
of his mind, and he was all intelligence officer.
"But I'm all right! I mean, there's nothing wrong. Are you out of your
mind again?"
"Yes," Zen said. "But I've got the rank to make my decisions stick
whether I'm out of my mind or not. Lieutenant, check this woman.
This is an order!" Zen snapped out the words with all the precision
and authority of a drill-field sergeant training recruits.
"Yes, sir," the startled medical officer said.
Ignoring Nedra's protests, Zen held her in place while the equipment
was put into operation. Behind them, West watched. The faintest
trace of an approving smile showed on the craggy man's face.
The lieutenant looked up from his meters. "She's all right too, sir."
"Sure of that?"
"Of course I'm sure. This counter doesn't lie!" The medical officer
was indignant.
So was Nedra. The violet eyes shot sparks of anger at the colonel.
Zen was unimpressed. Deep inside, he was tremendously relieved.
She had come down alive! She was unharmed! This was enough to
make him feel good all over. He also knew what she was. No
ordinary mortal could have remained in the hot zone for the length
of time she had been there and emerged unharmed. He did not
mind her anger. Instead he turned to West.
"You're next!"
He did not know what response to expect from the craggy man. It
might be anything. To his surprise, West smiled.
"Glad to, colonel. I was hoping I would get tested, so I would know
where I stood."
Without hesitation, West stepped in front of the scope. "While I am
certain I did not receive enough exposure to do any damage, still it
is best to follow your example and make certain." The deep voice
was suave, with tiny overtones of amusement in it somewhere.
Again the lieutenant studied his meters and again he looked up. Real
perplexity was on his face. "Three okays in a row. I didn't have a
single okay up until now." His gaze went up the slope in the
direction where the bomb had exploded.
"Does that mean I'm all right?" West asked.
"Yes. Definitely all right," the lieutenant answered. "And I don't
pretend to understand it."
"I was in a hole, too," West said. He seemed to be amused at some
joke known only to him.
The lieutenant brightened. "Then I understand it."
"I wish I did," Zen said, to himself. There was no longer any doubt in
his mind that Nedra was one of the new people. As to West, the
man was an enigma. Not knowing how long West had been exposed
to the radiation, Zen did not know what to make of his freedom from
it. But there was certainly something peculiar about him.
"Colonel, it was good to meet you." West was coming toward him
with outstretched hand. Zen had the impression that the man's hand
could turn into a veritable bear trap, if West chose. "Perhaps we
shall meet again, sir." The words were a statement, not a question.
An enigmatical smile played over the craggy man's face.
"Who knows whether we shall meet again?" Zen answered,
shrugging. "Generally, when people say goodbye these days, they
mean goodbye forever."
"I know." Sadness showed on the craggy, lined face. "It is too bad
that things have to be this way. Well, experience is a difficult school,
but homo sapiens seems incapable of learning in any other."
"It is war," Zen said.
"I disagree with you there," West said. "War is only a symptom of
the disease, it is only an expression of humanity. War itself is not at
fault, but man. Nor can man really be regarded as being at fault,
since what he is now going through is only a stage of growth."
Momentarily the memory of the contact with the race mind flicked
through Zen's consciousness. "I know that," he said. Then he
hesitated. "Or I knew it once."
"Ah? When?"
"Up the slope there, I knew it. But I have forgotten now what I
knew." Zen spoke slowly. He was trying hard to remember—or to
forget—he wasn't sure which.
"Ah?" West repeated. "Goodday, sir. Nedra, I would like to speak
with you for a moment, before I leave. With your permission, of
course, Colonel Zen."
"Certainly," Zen said. He watched the nurse and the craggy man
move up the trail a few steps. They carried on a conversation in
tones too low for him to overhear, then parted. West went down to
the bottom of the ravine and crossed to the other side of the gulch,
where he began to climb the opposite slope, staying as far away
from the radioactive zone as possible. Nedra returned to Zen beside
the truck.
"Does he live back there?" the intelligence agent asked.
"I really don't know," the nurse answered. "I think he does, but I'm
not certain."
"It's rough country to live in."
"From what I have seen of him, he seems capable of living almost
anywhere."
"Do you know him well?"
The violet eyes regarded him thoughtfully. "You are asking a great
many questions, sir."
"I'm going to ask more."
"My telephone number, no doubt. I'm sorry, but I don't have a
telephone." The violet eyes grew pensive. "But if I did have a
telephone number, there is no one I would rather give it to than
you."
He felt a warm glow at her words. The dream that he had once
shared with millions of other men, of a wife and kids, came into his
mind again, a yearning that was as old as history. If he had his free
choice, he would go with this dream.
He knew he did not have a free choice. Indeed, he doubted if he had
any choice at all. Nor had any other man. History had moved past
the day when this dream could be realized. Fate was sweeping it into
the dust heap of good things that were gone forever.
V
"She is immune to radiation!" Zen thought after Nedra had left to
rejoin her unit. This in itself was of sufficient importance to attract
and hold the interest of the top military and scientific minds. Perhaps
soldiers could also be immunized. Perhaps, by some impossible freak
of chance, a way might be found for workers to return to abandoned
factories, to long-closed shops and forges. This might mean a new
flow of goods and materials to troops that were desperately short of
them and to a civilian population that, at a conservative estimate,
was more than half starved.
A human being who had achieved immunity to radiation was
important enough to command his complete attention. Also, the
probability was very great that she was one of the mysterious new
people. Something else about her interested him even more. He
could not put his finger on this something else but he suspected it
had to do with the future, with another world than the one he knew.
Or with another universe. Again the memory of his contact with the
race mind flicked through his consciousness.
Now he knew what he was going to do insofar as Nedra was
concerned. He had a hunch what her next move would be. He would
wait for her to make it.
Finding a carbine was not difficult. On this trail, the weapons were to
be had for picking them up. A dead man's ammunition pouches were
filled with cartridges. He took the pouches. Carrying the carbine, he
slid down the bank toward the mountain stream that talked to itself
at the bottom of the canyon. The water was clear and cool but dead
trout floating in it warned him not to drink.
Seeking a place from which he could watch the canyon, he moved
upward. A dim trail was visible through the pines here.
"An old narrow-gauge railroad," he thought. The rails had been
removed long since, the ties had rotted away, and the roadbed itself
was hardly a trail through the growth of trees. He had barely settled
himself in a spot from which to watch the ravine below, than a stone
turned on the old roadbed.
Nedra was coming along the trail.
He let her pass without challenge. Sliding out of hiding, he followed
her.
Twisting and turning, the trail climbed slowly upward. When it
reached the edge of the timber, Zen caught a glimpse of a slide of
yellow rock far ahead, an old mine dump, which told him why the
road had been constructed in the first place. A ghost town was
probably ahead.
He caught a glimpse of Nedra moving steadily ahead along the old
road bed.
"If she doesn't know exactly where she is going, then I'm missing
my guess," he thought, as he followed her. Elation was rising in him.
She was leading him straight to the hiding place of the new people.
Here in these mountains a small group could remain in hiding
forever. Food might eventually become a problem, but there was
plenty of game in the ranges: deer, elk, and bear, and some of the
high valleys had been in cultivation before the war. A few hardy
pioneers had always managed to find a living in this wilderness. If
they could do it, so could this new group.
Of course, they would have to evade Cuso's roving patrols, raiding
for food, supplies and women. But that ought not to be too difficult.
The ghost town was in sight.
Surrounding an old mine, a crusher, and a concentrator, the ghost
town was also in ruins. Unlike so many small cities, the ruin here
had not come from attack but from nature. The snows of winter had
piled their burden on flimsy roofs, the seepage of spring had rotted
the timbers, with the result that many of the houses had simply
collapsed. Weeds grew in the doorways and scrub cedars had found
roots in the streets.
Nedra was walking down the middle of what had once been the
main street. Her stride was still certain and she seemed to know
exactly where she was going.
The ragged man appeared in the door of the garage on her left. He
spoke to the nurse, calling to her. She jumped at the sound of the
voice, glanced at the man, then continued walking.
"Hey, wait a minute, cutie!" the fellow shouted, loud enough for Zen
to hear him. He lunged out of the doorway toward her. She turned
to face him.
Kurt Zen lifted the carbine, then dropped the muzzle. He not only
had great confidence in Nedra's ability to protect herself, but he
wanted to see what would happen.
The loop of rope, thrown with all the skill of a cowboy, came from
the opposite side of the street. It settled over her shoulders, pinned
her arms to the side, and was instantly jerked tight. She was pulled
to the ground.
The man who had lunged out of the doorway of the garage leaped
toward her. Throwing her on her stomach, face down, he jerked
both hands behind her back, then began to search her for a weapon.
The man who had thrown the rope came out of hiding to help his
companion. He was short, with bow legs.
Together, they held the nurse down.
Zen raised the carbine to his shoulders. Although he had not
previously fired this weapon, at this distance he could not miss.
Her scream came to his ears.
"Colonel! Watch out!"
In startled surprise, he slid the carbine from his shoulder. She had
known he was following her and that he was somewhere near!
Thoughts like startled hornets flicked through his consciousness.
How had she known he was following her? Why had she let him do
it? More important, where was she leading him? Most important of
all, why was she trying to save him when her own life was in
danger?
Even if she had known he was following her, obviously she hadn't
known these men were here. She hadn't been coming to meet them.
Then what was her purpose in climbing to this old ghost town which
lay just at timberline on the edge of a mountain wilderness where
Cuso was held at bay?
The first ruffian was standing erect. Zen brought the sights of the
carbine to bear on the center of his ragged coat.
"Drop the gun!" a voice said behind him.
Even more surprising than the command was the fact that he knew
the voice that had spoken. Or he thought he did. He let the carbine
slide from his fingers.
"Now get 'em up."
He raised his hands. "Hello, Jake," he called out.
An exclamation of surprise came from behind him. "How the hell did
you know me?"
"Recognized your voice," Zen answered. "Can I turn around now?"
"Sure. Sure. But what the hell are you doing up here?"
Turning, Zen saw the automatic rifle that covered him. The muzzle
was wavering and the man who held it seemed confused. His face
was covered with a heavy growth of black whiskers and long hair
peeped out from under a battered helmet.
"Jake, it's really good to see you again." As if such things as
automatic rifles did not exist, Zen advanced with outstretched hand.
"Kurt Zen! I haven't seen you since—since—"
"The night that Denver got it," Zen answered. Horror overwhelmed
him as he remembered what had happened to the Mile-High city. A
bomb had struck from the sky that night and parts of Denver had
gone much higher than a mile.
"Yeah. That's it. Yeah. I thought you had got it that night, Kurt."
"I thought the same thing about you. What are you doing up here?
And what—what happened to Marcia?"
The instant Zen asked the question, he wished he had kept still. At
the name something happened in the man's eyes. They began to
change, going from comprehension to blankness, then coming back
to understanding, then losing that and going back to blankness. One
instant the eyes looked at Zen and the man remembered and liked
this colonel. The next instant, neither the eyes nor the mind behind
them knew him. Zen was then an alien, a stranger, to be distrusted
and feared and possibly destroyed. When Zen had known him in
Denver, Jake had been a young airman. He and Marcia had been
newly married and very much in love with each other.
"She—she—" The voice was choked and tight with pain. "The
radiation got her." For an instant, the memory held true. But there
was too much pain in the memory for this man to face it. The
memory went away. Only the pain remained. "Marcia? Oh, she's fine.
The next leave I get, we're going to have a second honeymoon." A
glow appeared in the man's eyes. "I can see her now, waiting for
me. You must go with me, Kurt, and meet her again, the next leave
I get."
Zen could have slugged him. He could have lifted the rifle out of
Jake's hands without protest. Instead, he did nothing. The man's
pain was much too real to hurt him further.
"What's going on here?" a rough voice said.
It was the man in the ragged coat. Nedra and the man who had
thrown the rope had disappeared. There was no indication where
they had gone. This man's beard was thin and ragged. He had teeth
like the fangs of a wolf but the lights in his eyes did not shift.
Instead, they remained fixed in constant hostility and suspicion. He
had a sub-machine gun in his hands. The muzzle covered Zen.
"Oh, hello, Cal. I—" Jake became confused. "This is an old buddy of
mine. I knew him down below ... I knew him when.... He's all right."
Cal's eyes said he did not believe a word he had heard. He looked
Zen up and down. The muzzle of the gun did not waver from the
intelligence agent's stomach. "What are you doing up here?"
"Maybe I got tired of the way things are down there," Zen answered.
He was not lying. He was tired of the way things were going. So
were uncounted millions of others.
Cal's eyes indicated he did not believe this. Zen could see him
turning over different possibilities in his mind. He was inclined to use
the gun. Dumping another body down the gorge would be an easy
solution to the problem of an intruder. "How are things going down
there?" he asked.
"Tough," Zen said, with conviction in his voice.
"What was the big boom over that way this morning?"
"Cuso letting go with a blooper."
Interest kindled in Cal's eyes. "What was over there that was worth
the cost of a blooper?"
"A column of troops heading for Cuso's lair," Zen answered. "He
didn't like it."
"I guess he wouldn't," Cal said. "You with 'em?"
"I was."
"Which way are they going now?"
"Back down hill to die," Zen answered.
"Why didn't you go with 'em?"
"I got tired," Zen said. He waved his hands in a gesture which was
intended to explain how a man sometimes got tired and went off to
rest for a while. Cal grunted. This he understood.
"Are you hot?" he asked.
"Nope. The medics checked me just before I took off."
"And are there others down there who feel like heading for the
hills?"
"Most of them are too damned near dead to make the effort. Why
desert when you've had it?"
"The blooper got a lot of 'em, eh?"
"What the blast didn't get, the radioactivity did."
"Is the pass too hot for more troops to go through it?"
"My guess is that way."
"Your guess? Don't you know?"
"I didn't go up to see. I'm not that soft in the head."
"I see your point. Well, things must be really rough if colonels are
deserting. This is interesting." Cal fingered the gun but the muzzle
no longer pointed at Zen's stomach. "What are you looking for up
here?"
"A place to hide out."
"For how long?"
"Hell, how long can this go on?" Zen answered. "Even when it's over,
I don't want to go back down there and walk on skulls."
"Walk on skulls?"
"That's all that will be left."
"You think the Asians are gonna win, then?"
"I got a hunch there will be more skulls than anything else in Asia,
too. No, I don't think they're going to win. I don't think anybody is
going to win this one, except the people who have enough sense to
hide."
Jake came out of his dreaming and put his hand on Cal's shoulder.
"Kurt's all right," he said.
It was obvious that Cal did not think very highly of this
recommendation.
"He's my pal," Jake continued. "Let him join us. He'll make a good
hand. Besides, me and him were buddies. And there was a girl—" He
stopped speaking and broke into dark musing as the memory of his
wife came again into his mind.
"Were you with this woman?" Cal asked.
"He never was with this woman in his life!" Jake screamed. "She was
mine, I tell you. Mine!"
"Shut up, crazy head."
"Tell him, Kurt. Tell him Marcia was mine."
"Sure, Jake," Zen soothed. "Everybody knew you and Marcia were
that way. Cal and I were talking about another woman."
"Oh. That's different. But I don't want to hear either of you say that
Marcia didn't belong to me."
The wolf-faced man looked as if he was about to use his gun on
Jake. "You stinking nut head, you stay out of this!"
"All I was trying to do was to tell you Kurt was my pal."
"All right, you've told me. Now shut up." Cal turned to Zen again.
"About this woman, colonel? Were you together?"
"No," Zen said.
"But she yelled out to you when me and Ed grabbed her."
"I heard her."
"You did?" Cal's finger went around the trigger of the gun.
"Yeah. I was following her but I didn't know she knew it until she
yelled."
"Oh." Cal kept his finger on the trigger. "Why were you following
her?"
"Hell, don't be stupid!" Zen exploded. "Why would any man follow a
woman like that?"
A trace of a grin went across the wolf face at this answer. Cal licked
his lips. This was an answer he understood. "I don't blame you for
that. But why was she coming up here?"
"That I don't know," Zen said. "I don't think it made much difference
anyhow. As soon as night came—" He squinted at the sun.
"Do you think she might be a spy for Cuso heading for his camp to
report?"
Zen felt his lower jaw sag. This was a thought that had not crossed
his mind. He knew only too well that the Asiatic had spies in as
many places as he could get them. Cuso's survival depended in a
large degree on knowing how many troops were moving against
him, how they were armed and over what passes they were coming.
"I see by your face that you had never thought of that," Cal said.
"Then what is she doing up here?"
"I don't know. I realized she was ahead of me about a mile back. As
to what she is doing, maybe she got tired of all that down there too,
and decided to come up here and live in the mountains?"
"A woman in this wilderness?"
"Some women have delusions that they can return to the primitive
and make a go of it."
"And maybe she had some other idea," Cal said.
Zen shrugged.
"Knowing this may be important to us," Cal said.
"Then we had better go ask her," Zen said. He was still shocked at
the thought that Nedra might be a spy. Up until now, he had thought
he was shockproof.
"You want to ask her?" Cal said.
"Sure."
"Okay, you do the asking. I'll listen. And don't get any funny ideas."
His finger curled around the trigger of the gun. "Remember, that if a
patrol should come looking for a deserter, they would only be going
to shoot him. I would be doing them a favor if I shot him in
advance."
"I covered my tracks," Zen said. "Nobody will be looking for me."
"How did you do it?"
"I traded dog tags with a hunk of meat that had once been a GI.
There wasn't enough left of him to tell for sure what he was. The
burial detail will clip my tags from his body and another colonel will
be listed as killed in action. The GI will be listed as missing."
"That was smart," Cal said, approvingly. For the first time, Zen
thought he detected a note of admiration in the voice tones of the
ragged man.
Nedra was leaning against what had once been a work-bench in the
garage. Her helmet was off, her hair was ruffled, and her tunic had
been almost torn from her body. A look of pure gratitude appeared
on her face when Zen stepped through the doorway. A little cry of
gladness on her lips, she started toward him. Her eyes said she had
never been as happy to see anybody in her life as she was to see
this tall, lean colonel.
With her was the little bow-legged man. He didn't look happy as Zen
entered. "Stand still," he snarled at the girl. "Who the hell are you?"
At his words, Nedra let her body sag back against the bench.
"Ed, this is Kurt," Cal said. "He's joining us."
The look in Ed's eyes was pure venom. "He may join us but he won't
last long. This woman is mine. I saw her first."
Zen wished fervently that he had the carbine back in his possession.
Some vermin did not deserve to live. But Jake had that weapon.
While he could probably take the carbine away from Jake, the gun in
Cal's hands was very steady.
"She's not mine, you know," he said to Ed. "So far as I am
concerned, you are welcome to her."
"Oh, that's different," Ed said, relieved.
If Zen's words relieved Ed, they had the opposite effect on Nedra.
She opened her mouth to speak to him, then closed it in an
apparent effort to bite off words that no lady should use.
Cal laughed. "Ed is mighty touchy about his women. But don't let
that stop you. Ask her what she is doing up here?"
"None of your damned business, either of you," Nedra answered.
Zen shrugged and spread his hands in a gesture which said that he
hoped Cal would see how it was. Cal nodded. "We'll find out later."
His manner indicated there was no question in his mind that he
would find out what he wanted to know. "Right now it's time for
chow. Jake, get on the job."
Jake turned and walked across the street to another house. Cal
bringing up the rear, the others followed Jake. Ed took hold of
Nedra's arm and escorted her across the street. Seeing this, Kurt
Zen again wished that he had a gun.
VI
The meal was beef stew, which Jake prepared in a big pot on an old
wood-burning range. They all ate around the kitchen table.
"There are lots of wild cattle up here," Cal explained. "This used to
be good range country, you know. The remnants of the old beef
herds are still in existence, the ones that have learned how to dodge
or whip the lions, that is."
Zen was busy watching Nedra and Ed. The little bantam was
following every move she made and was keeping as close to her as
possible. He insisted on sitting next to her at the table and he kept
trying to touch her at every opportunity.
Zen kept silent. Inwardly, he was greatly perturbed. Night was
already throwing shadows over the mountains. What would happen
after darkness fell? Trying to keep such thoughts out of his mind, he
found himself wondering if it would be possible for him to break the
bantam's neck with his bare hands. He decided he could do this, and
that he would like to do it, but that he would also like to stay alive
afterward.
"Girls who go walking in the mountains have to take what happens
to them," he said.
Nedra ignored him. Ed glowered at him. Cal chuckled but continued
eating without speaking. Jake ate as if he did not know what he was
doing or where he was. Occasionally he looked toward the northwest
and shook his fist in that direction. Zen knew that deep in his sick
mind Jake was dreaming of what he would do to the Asians.
Remembering Marcia, Zen did not blame him.
Ed tried to urge the nurse toward the dilapidated sofa in the room
but she eluded him and sat on an empty powder can, to the obvious
disgust of the bantam. Two people could not sit on the same powder

You might also like