Author: Michael Inden
Publisher: Apress
ISBN: 9781484273975
Category : Computers
Languages : en
Pages : 486
Book Description
Augment your knowledge of Python with this entertaining learning guide, which features 100 exercises and programming puzzles and solutions. Python Challenges will help prepare you for your next exam or a job interview, and covers numerous practical topics such as strings, data structures, recursion, arrays, and more. Each topic is addressed in its own separate chapter, starting with an introduction to the basics and followed by 10 to 15 exercises of various degrees of difficulty, helping you to improve your programming skills effectively. Detailed sample solutions, including the algorithms used for all tasks, are included to maximize your understanding of each area. Author Michael Inden also describes alternative solutions and analyzes possible pitfalls and typical errors. Three appendices round out the book: the first covers the Python command line interpreter, which is often helpful for trying out the code snippets and examples in the book, followed by an overview of Pytest for unit testing and checking the solutions. The last explains the O notation for estimating performance. After reading this book, you'll be prepared to take the next step in your career or tackle your next personal project. All source code is freely available for download via the Apress website. What You Will Learn Improve your Python knowledge by solving enjoyable but challenging programming puzzles Solve mathematical problems, recursions, strings, arrays and more Manage data processing and data structures like lists, sets, maps Handle advanced recursion as well as binary trees, sorting and searching Gamify key fundamentals for fun and easier reinforcement Who this book is for: Programmers, software developers who are either professionals or makers, as well as students and teachers. At least some prior experience with the Python programming is recommended.
Python Challenges
Author: Michael Inden
Publisher: Apress
ISBN: 9781484273975
Category : Computers
Languages : en
Pages : 486
Book Description
Augment your knowledge of Python with this entertaining learning guide, which features 100 exercises and programming puzzles and solutions. Python Challenges will help prepare you for your next exam or a job interview, and covers numerous practical topics such as strings, data structures, recursion, arrays, and more. Each topic is addressed in its own separate chapter, starting with an introduction to the basics and followed by 10 to 15 exercises of various degrees of difficulty, helping you to improve your programming skills effectively. Detailed sample solutions, including the algorithms used for all tasks, are included to maximize your understanding of each area. Author Michael Inden also describes alternative solutions and analyzes possible pitfalls and typical errors. Three appendices round out the book: the first covers the Python command line interpreter, which is often helpful for trying out the code snippets and examples in the book, followed by an overview of Pytest for unit testing and checking the solutions. The last explains the O notation for estimating performance. After reading this book, you'll be prepared to take the next step in your career or tackle your next personal project. All source code is freely available for download via the Apress website. What You Will Learn Improve your Python knowledge by solving enjoyable but challenging programming puzzles Solve mathematical problems, recursions, strings, arrays and more Manage data processing and data structures like lists, sets, maps Handle advanced recursion as well as binary trees, sorting and searching Gamify key fundamentals for fun and easier reinforcement Who this book is for: Programmers, software developers who are either professionals or makers, as well as students and teachers. At least some prior experience with the Python programming is recommended.
Publisher: Apress
ISBN: 9781484273975
Category : Computers
Languages : en
Pages : 486
Book Description
Augment your knowledge of Python with this entertaining learning guide, which features 100 exercises and programming puzzles and solutions. Python Challenges will help prepare you for your next exam or a job interview, and covers numerous practical topics such as strings, data structures, recursion, arrays, and more. Each topic is addressed in its own separate chapter, starting with an introduction to the basics and followed by 10 to 15 exercises of various degrees of difficulty, helping you to improve your programming skills effectively. Detailed sample solutions, including the algorithms used for all tasks, are included to maximize your understanding of each area. Author Michael Inden also describes alternative solutions and analyzes possible pitfalls and typical errors. Three appendices round out the book: the first covers the Python command line interpreter, which is often helpful for trying out the code snippets and examples in the book, followed by an overview of Pytest for unit testing and checking the solutions. The last explains the O notation for estimating performance. After reading this book, you'll be prepared to take the next step in your career or tackle your next personal project. All source code is freely available for download via the Apress website. What You Will Learn Improve your Python knowledge by solving enjoyable but challenging programming puzzles Solve mathematical problems, recursions, strings, arrays and more Manage data processing and data structures like lists, sets, maps Handle advanced recursion as well as binary trees, sorting and searching Gamify key fundamentals for fun and easier reinforcement Who this book is for: Programmers, software developers who are either professionals or makers, as well as students and teachers. At least some prior experience with the Python programming is recommended.
101 Python Challenges with Solutions / Code Listings
Author: Philippe Kerampran
Publisher:
ISBN: 9781326948344
Category :
Languages : en
Pages :
Book Description
This selection of 101 Python programming challenges is targeted at both learners and educators who want to find a challenging and enthusing approach to develop their programming skills using Python. In this book you will find a fully working solution to each of the 101 challenges in the form of annotated Python code listings. We believe that being able to work on these challenges and reverse-engineer the given code will give you a fantastic opportunity to improve your Python skills while discovering new programing techniques. This selection of challenges from the 101computing.net blog will cover all of the essential skills used in procedural programming, focusing on the key programming constructs: sequencing, selection and iteration. The 101 challenges are organised into ten chapters to help you discover and practise using a range of programming strategies using a step by step approach.
Publisher:
ISBN: 9781326948344
Category :
Languages : en
Pages :
Book Description
This selection of 101 Python programming challenges is targeted at both learners and educators who want to find a challenging and enthusing approach to develop their programming skills using Python. In this book you will find a fully working solution to each of the 101 challenges in the form of annotated Python code listings. We believe that being able to work on these challenges and reverse-engineer the given code will give you a fantastic opportunity to improve your Python skills while discovering new programing techniques. This selection of challenges from the 101computing.net blog will cover all of the essential skills used in procedural programming, focusing on the key programming constructs: sequencing, selection and iteration. The 101 challenges are organised into ten chapters to help you discover and practise using a range of programming strategies using a step by step approach.
Python Challenge!
Author: Pm Heathcote
Publisher:
ISBN: 9781910523353
Category :
Languages : en
Pages : 98
Book Description
Learn to program fast in 155 challenges, 54 examples and 85 pages This book is a 'gamified' approach to Python, aimed at supporting GCSE and KS3 students, with complete coverage of the GCSE programming requirements. There's no substitute for practice when it comes to learning a new skill! Python syntax is simple to learn, but becoming an expert in writing programs to solve different kinds of problems takes a bit longer. That's why this book has a short explanation of each new statement or technique, followed by one or more examples and then loads of practice challenges. Some of the challenges will take you only a minute or two, using the Python Interactive window to try out new statements and get immediate results. As you get further into the book, you will be challenged to write programs to perform different kinds of tasks - for example to find the results of a calculation, write a program for a simplified cash machine, sort a list of items into alphabetical order, or to record data in a text file to be read, formatted, and printed. The programming solutions to some challenges have been helpfully simplified for an inexperienced programmer to modify rather than to write from scratch. This builds your confidence in problem-solving. That's why 35 challenges consist of partially written programs for you to complete.
Publisher:
ISBN: 9781910523353
Category :
Languages : en
Pages : 98
Book Description
Learn to program fast in 155 challenges, 54 examples and 85 pages This book is a 'gamified' approach to Python, aimed at supporting GCSE and KS3 students, with complete coverage of the GCSE programming requirements. There's no substitute for practice when it comes to learning a new skill! Python syntax is simple to learn, but becoming an expert in writing programs to solve different kinds of problems takes a bit longer. That's why this book has a short explanation of each new statement or technique, followed by one or more examples and then loads of practice challenges. Some of the challenges will take you only a minute or two, using the Python Interactive window to try out new statements and get immediate results. As you get further into the book, you will be challenged to write programs to perform different kinds of tasks - for example to find the results of a calculation, write a program for a simplified cash machine, sort a list of items into alphabetical order, or to record data in a text file to be read, formatted, and printed. The programming solutions to some challenges have been helpfully simplified for an inexperienced programmer to modify rather than to write from scratch. This builds your confidence in problem-solving. That's why 35 challenges consist of partially written programs for you to complete.
Python by Example
Author: Nichola Lacey
Publisher: Cambridge University Press
ISBN: 1108716830
Category : Computers
Languages : en
Pages : 190
Book Description
A refreshingly different and engaging way of learning how to program using Python. This book includes example code and brief user-friendly explanations, along with 150 progressively trickier challenges. As readers are actively involved in their learning, they quickly master the new skills and gain confidence in creating their own programs.
Publisher: Cambridge University Press
ISBN: 1108716830
Category : Computers
Languages : en
Pages : 190
Book Description
A refreshingly different and engaging way of learning how to program using Python. This book includes example code and brief user-friendly explanations, along with 150 progressively trickier challenges. As readers are actively involved in their learning, they quickly master the new skills and gain confidence in creating their own programs.
Classic Computer Science Problems in Java
Author: David Kopec
Publisher: Simon and Schuster
ISBN: 1638356548
Category : Computers
Languages : en
Pages : 262
Book Description
Sharpen your coding skills by exploring established computer science problems! Classic Computer Science Problems in Java challenges you with time-tested scenarios and algorithms. Summary Sharpen your coding skills by exploring established computer science problems! Classic Computer Science Problems in Java challenges you with time-tested scenarios and algorithms. You’ll work through a series of exercises based in computer science fundamentals that are designed to improve your software development abilities, improve your understanding of artificial intelligence, and even prepare you to ace an interview. As you work through examples in search, clustering, graphs, and more, you'll remember important things you've forgotten and discover classic solutions to your "new" problems! Purchase of the print book includes a free eBook in PDF, Kindle, and ePub formats from Manning Publications. About the technology Whatever software development problem you’re facing, odds are someone has already uncovered a solution. This book collects the most useful solutions devised, guiding you through a variety of challenges and tried-and-true problem-solving techniques. The principles and algorithms presented here are guaranteed to save you countless hours in project after project. About the book Classic Computer Science Problems in Java is a master class in computer programming designed around 55 exercises that have been used in computer science classrooms for years. You’ll work through hands-on examples as you explore core algorithms, constraint problems, AI applications, and much more. What's inside Recursion, memoization, and bit manipulation Search, graph, and genetic algorithms Constraint-satisfaction problems K-means clustering, neural networks, and adversarial search About the reader For intermediate Java programmers. About the author David Kopec is an assistant professor of Computer Science and Innovation at Champlain College in Burlington, Vermont. Table of Contents 1 Small problems 2 Search problems 3 Constraint-satisfaction problems 4 Graph problems 5 Genetic algorithms 6 K-means clustering 7 Fairly simple neural networks 8 Adversarial search 9 Miscellaneous problems 10 Interview with Brian Goetz
Publisher: Simon and Schuster
ISBN: 1638356548
Category : Computers
Languages : en
Pages : 262
Book Description
Sharpen your coding skills by exploring established computer science problems! Classic Computer Science Problems in Java challenges you with time-tested scenarios and algorithms. Summary Sharpen your coding skills by exploring established computer science problems! Classic Computer Science Problems in Java challenges you with time-tested scenarios and algorithms. You’ll work through a series of exercises based in computer science fundamentals that are designed to improve your software development abilities, improve your understanding of artificial intelligence, and even prepare you to ace an interview. As you work through examples in search, clustering, graphs, and more, you'll remember important things you've forgotten and discover classic solutions to your "new" problems! Purchase of the print book includes a free eBook in PDF, Kindle, and ePub formats from Manning Publications. About the technology Whatever software development problem you’re facing, odds are someone has already uncovered a solution. This book collects the most useful solutions devised, guiding you through a variety of challenges and tried-and-true problem-solving techniques. The principles and algorithms presented here are guaranteed to save you countless hours in project after project. About the book Classic Computer Science Problems in Java is a master class in computer programming designed around 55 exercises that have been used in computer science classrooms for years. You’ll work through hands-on examples as you explore core algorithms, constraint problems, AI applications, and much more. What's inside Recursion, memoization, and bit manipulation Search, graph, and genetic algorithms Constraint-satisfaction problems K-means clustering, neural networks, and adversarial search About the reader For intermediate Java programmers. About the author David Kopec is an assistant professor of Computer Science and Innovation at Champlain College in Burlington, Vermont. Table of Contents 1 Small problems 2 Search problems 3 Constraint-satisfaction problems 4 Graph problems 5 Genetic algorithms 6 K-means clustering 7 Fairly simple neural networks 8 Adversarial search 9 Miscellaneous problems 10 Interview with Brian Goetz
Learn to Code by Solving Problems
Author: Daniel Zingaro
Publisher: No Starch Press
ISBN: 1718501331
Category : Computers
Languages : en
Pages : 392
Book Description
Learn to Code by Solving Problems is a practical introduction to programming using Python. It uses coding-competition challenges to teach you the mechanics of coding and how to think like a savvy programmer. Computers are capable of solving almost any problem when given the right instructions. That’s where programming comes in. This beginner’s book will have you writing Python programs right away. You’ll solve interesting problems drawn from real coding competitions and build your programming skills as you go. Every chapter presents problems from coding challenge websites, where online judges test your solutions and provide targeted feedback. As you practice using core Python features, functions, and techniques, you’ll develop a clear understanding of data structures, algorithms, and other programming basics. Bonus exercises invite you to explore new concepts on your own, and multiple-choice questions encourage you to think about how each piece of code works. You’ll learn how to: Run Python code, work with strings, and use variables Write programs that make decisions Make code more efficient with while and for loops Use Python sets, lists, and dictionaries to organize, sort, and search data Design programs using functions and top-down design Create complete-search algorithms and use Big O notation to design more efficient code By the end of the book, you’ll not only be proficient in Python, but you’ll also understand how to think through problems and tackle them with code. Programming languages come and go, but this book gives you the lasting foundation you need to start thinking like a programmer.
Publisher: No Starch Press
ISBN: 1718501331
Category : Computers
Languages : en
Pages : 392
Book Description
Learn to Code by Solving Problems is a practical introduction to programming using Python. It uses coding-competition challenges to teach you the mechanics of coding and how to think like a savvy programmer. Computers are capable of solving almost any problem when given the right instructions. That’s where programming comes in. This beginner’s book will have you writing Python programs right away. You’ll solve interesting problems drawn from real coding competitions and build your programming skills as you go. Every chapter presents problems from coding challenge websites, where online judges test your solutions and provide targeted feedback. As you practice using core Python features, functions, and techniques, you’ll develop a clear understanding of data structures, algorithms, and other programming basics. Bonus exercises invite you to explore new concepts on your own, and multiple-choice questions encourage you to think about how each piece of code works. You’ll learn how to: Run Python code, work with strings, and use variables Write programs that make decisions Make code more efficient with while and for loops Use Python sets, lists, and dictionaries to organize, sort, and search data Design programs using functions and top-down design Create complete-search algorithms and use Big O notation to design more efficient code By the end of the book, you’ll not only be proficient in Python, but you’ll also understand how to think through problems and tackle them with code. Programming languages come and go, but this book gives you the lasting foundation you need to start thinking like a programmer.
Python for Everybody
Author: Charles R. Severance
Publisher:
ISBN: 9781530051120
Category :
Languages : en
Pages : 242
Book Description
Python for Everybody is designed to introduce students to programming and software development through the lens of exploring data. You can think of the Python programming language as your tool to solve data problems that are beyond the capability of a spreadsheet.Python is an easy to use and easy to learn programming language that is freely available on Macintosh, Windows, or Linux computers. So once you learn Python you can use it for the rest of your career without needing to purchase any software.This book uses the Python 3 language. The earlier Python 2 version of this book is titled "Python for Informatics: Exploring Information".There are free downloadable electronic copies of this book in various formats and supporting materials for the book at www.pythonlearn.com. The course materials are available to you under a Creative Commons License so you can adapt them to teach your own Python course.
Publisher:
ISBN: 9781530051120
Category :
Languages : en
Pages : 242
Book Description
Python for Everybody is designed to introduce students to programming and software development through the lens of exploring data. You can think of the Python programming language as your tool to solve data problems that are beyond the capability of a spreadsheet.Python is an easy to use and easy to learn programming language that is freely available on Macintosh, Windows, or Linux computers. So once you learn Python you can use it for the rest of your career without needing to purchase any software.This book uses the Python 3 language. The earlier Python 2 version of this book is titled "Python for Informatics: Exploring Information".There are free downloadable electronic copies of this book in various formats and supporting materials for the book at www.pythonlearn.com. The course materials are available to you under a Creative Commons License so you can adapt them to teach your own Python course.
Challenging Programming in Python: A Problem Solving Perspective
Author: Habib Izadkhah
Publisher: Springer Nature
ISBN: 3031399994
Category : Technology & Engineering
Languages : en
Pages : 287
Book Description
This book aims to strengthen programming skills and foster creative thinking by presenting and solving 90 challenging problems. The book is intended for individuals with elementary, intermediate, and advanced Python programming skills who aspire to take their abilities to the next level. Additionally, the book is valuable for individuals interested in enhancing their creative thinking and logical reasoning skills. It is a self-instructional book meant to provide readers with the ability to solve challenging problems independently. The presented challenges are lucidly and succinctly expressed, facilitating readers to follow along and comprehend the problem-solving process. The challenges cover various fields, making it suitable for a wide range of individuals. The book is divided into eight chapters, beginning with an introduction in chapter one. The second chapter presents essential Python basics for programming challenging problems, while the subsequent chapters focus on specific types of challenges. These include math-based challenges in chapter three, number-based challenges in chapter four, string-based challenges in chapter five, game-based challenges in chapter six, count-based challenges in chapter seven, and miscellaneous challenges in chapter eight. Each chapter comprises a set of challenges with examples, hints, algorithms, and Python code solutions. The target audience of the book includes computer science and engineering students, teachers, software developers, and participants in programming competitions.
Publisher: Springer Nature
ISBN: 3031399994
Category : Technology & Engineering
Languages : en
Pages : 287
Book Description
This book aims to strengthen programming skills and foster creative thinking by presenting and solving 90 challenging problems. The book is intended for individuals with elementary, intermediate, and advanced Python programming skills who aspire to take their abilities to the next level. Additionally, the book is valuable for individuals interested in enhancing their creative thinking and logical reasoning skills. It is a self-instructional book meant to provide readers with the ability to solve challenging problems independently. The presented challenges are lucidly and succinctly expressed, facilitating readers to follow along and comprehend the problem-solving process. The challenges cover various fields, making it suitable for a wide range of individuals. The book is divided into eight chapters, beginning with an introduction in chapter one. The second chapter presents essential Python basics for programming challenging problems, while the subsequent chapters focus on specific types of challenges. These include math-based challenges in chapter three, number-based challenges in chapter four, string-based challenges in chapter five, game-based challenges in chapter six, count-based challenges in chapter seven, and miscellaneous challenges in chapter eight. Each chapter comprises a set of challenges with examples, hints, algorithms, and Python code solutions. The target audience of the book includes computer science and engineering students, teachers, software developers, and participants in programming competitions.
Exercises for Programmers
Author: Brian P. Hogan
Publisher: Pragmatic Bookshelf
ISBN: 1680503480
Category : Computers
Languages : en
Pages : 120
Book Description
When you write software, you need to be at the top of your game. Great programmers practice to keep their skills sharp. Get sharp and stay sharp with more than fifty practice exercises rooted in real-world scenarios. If you're a new programmer, these challenges will help you learn what you need to break into the field, and if you're a seasoned pro, you can use these exercises to learn that hot new language for your next gig. One of the best ways to learn a programming language is to use it to solve problems. That's what this book is all about. Instead of questions rooted in theory, this book presents problems you'll encounter in everyday software development. These problems are designed for people learning their first programming language, and they also provide a learning path for experienced developers to learn a new language quickly. Start with simple input and output programs. Do some currency conversion and figure out how many months it takes to pay off a credit card. Calculate blood alcohol content and determine if it's safe to drive. Replace words in files and filter records, and use web services to display the weather, store data, and show how many people are in space right now. At the end you'll tackle a few larger programs that will help you bring everything together. Each problem includes constraints and challenges to push you further, but it's up to you to come up with the solutions. And next year, when you want to learn a new programming language or style of programming (perhaps OOP vs. functional), you can work through this book again, using new approaches to solve familiar problems. What You Need: You need access to a computer, a programming language reference, and the programming language you want to use.
Publisher: Pragmatic Bookshelf
ISBN: 1680503480
Category : Computers
Languages : en
Pages : 120
Book Description
When you write software, you need to be at the top of your game. Great programmers practice to keep their skills sharp. Get sharp and stay sharp with more than fifty practice exercises rooted in real-world scenarios. If you're a new programmer, these challenges will help you learn what you need to break into the field, and if you're a seasoned pro, you can use these exercises to learn that hot new language for your next gig. One of the best ways to learn a programming language is to use it to solve problems. That's what this book is all about. Instead of questions rooted in theory, this book presents problems you'll encounter in everyday software development. These problems are designed for people learning their first programming language, and they also provide a learning path for experienced developers to learn a new language quickly. Start with simple input and output programs. Do some currency conversion and figure out how many months it takes to pay off a credit card. Calculate blood alcohol content and determine if it's safe to drive. Replace words in files and filter records, and use web services to display the weather, store data, and show how many people are in space right now. At the end you'll tackle a few larger programs that will help you bring everything together. Each problem includes constraints and challenges to push you further, but it's up to you to come up with the solutions. And next year, when you want to learn a new programming language or style of programming (perhaps OOP vs. functional), you can work through this book again, using new approaches to solve familiar problems. What You Need: You need access to a computer, a programming language reference, and the programming language you want to use.
Python Workout
Author: Reuven M. Lerner
Publisher: Manning Publications
ISBN: 1617295507
Category : Computers
Languages : en
Pages : 246
Book Description
The only way to master a skill is to practice. In Python Workout, author Reuven M. Lerner guides you through 50 carefully selected exercises that invite you to flex your programming muscles. As you take on each new challenge, you’ll build programming skill and confidence. Summary The only way to master a skill is to practice. In Python Workout, author Reuven M. Lerner guides you through 50 carefully selected exercises that invite you to flex your programming muscles. As you take on each new challenge, you’ll build programming skill and confidence. The thorough explanations help you lock in what you’ve learned and apply it to your own projects. Along the way, Python Workout provides over four hours of video instruction walking you through the solutions to each exercise and dozens of additional exercises for you to try on your own. Purchase of the print book includes a free eBook in PDF, Kindle, and ePub formats from Manning Publications. About the technology To become a champion Python programmer you need to work out, building mental muscle with your hands on the keyboard. Each carefully selected exercise in this unique book adds to your Python prowess—one important skill at a time. About the book Python Workout presents 50 exercises that focus on key Python 3 features. In it, expert Python coach Reuven Lerner guides you through a series of small projects, practicing the skills you need to tackle everyday tasks. You’ll appreciate the clear explanations of each technique, and you can watch Reuven solve each exercise in the accompanying videos. What's inside 50 hands-on exercises and solutions Coverage of all Python data types Dozens more bonus exercises for extra practice About the reader For readers with basic Python knowledge. About the author Reuven M. Lerner teaches Python and data science to companies around the world. Table of Contents 1 Numeric types 2 Strings 3 Lists and tuples 4 Dictionaries and sets 5 Files 6 Functions 7 Functional programming with comprehensions 8 Modules and packages 9 Objects 10 Iterators and generators
Publisher: Manning Publications
ISBN: 1617295507
Category : Computers
Languages : en
Pages : 246
Book Description
The only way to master a skill is to practice. In Python Workout, author Reuven M. Lerner guides you through 50 carefully selected exercises that invite you to flex your programming muscles. As you take on each new challenge, you’ll build programming skill and confidence. Summary The only way to master a skill is to practice. In Python Workout, author Reuven M. Lerner guides you through 50 carefully selected exercises that invite you to flex your programming muscles. As you take on each new challenge, you’ll build programming skill and confidence. The thorough explanations help you lock in what you’ve learned and apply it to your own projects. Along the way, Python Workout provides over four hours of video instruction walking you through the solutions to each exercise and dozens of additional exercises for you to try on your own. Purchase of the print book includes a free eBook in PDF, Kindle, and ePub formats from Manning Publications. About the technology To become a champion Python programmer you need to work out, building mental muscle with your hands on the keyboard. Each carefully selected exercise in this unique book adds to your Python prowess—one important skill at a time. About the book Python Workout presents 50 exercises that focus on key Python 3 features. In it, expert Python coach Reuven Lerner guides you through a series of small projects, practicing the skills you need to tackle everyday tasks. You’ll appreciate the clear explanations of each technique, and you can watch Reuven solve each exercise in the accompanying videos. What's inside 50 hands-on exercises and solutions Coverage of all Python data types Dozens more bonus exercises for extra practice About the reader For readers with basic Python knowledge. About the author Reuven M. Lerner teaches Python and data science to companies around the world. Table of Contents 1 Numeric types 2 Strings 3 Lists and tuples 4 Dictionaries and sets 5 Files 6 Functions 7 Functional programming with comprehensions 8 Modules and packages 9 Objects 10 Iterators and generators