Chapter 7: Strings | Python for Everybody 讲义笔记_En

这篇具有很好参考价值的文章主要介绍了Chapter 7: Strings | Python for Everybody 讲义笔记_En。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


Python for Everybody

Exploring Data Using Python 3
Dr. Charles R. Severance


课程简介

Python for Everybody 零基础程序设计(Python 入门)

  • This course aims to teach everyone the basics of programming computers using Python. 本课程旨在向所有人传授使用 Python 进行计算机编程的基础知识。
  • We cover the basics of how one constructs a program from a series of simple instructions in Python. 我们介绍了如何通过 Python 中的一系列简单指令构建程序的基础知识。
  • The course has no pre-requisites and avoids all but the simplest mathematics. Anyone with moderate computer experience should be able to master the materials in this course. 该课程没有任何先决条件,除了最简单的数学之外,避免了所有内容。任何具有中等计算机经验的人都应该能够掌握本课程中的材料。
  • This course will cover Chapters 1-5 of the textbook “Python for Everybody”. Once a student completes this course, they will be ready to take more advanced programming courses. 本课程将涵盖《Python for Everyday》教科书的第 1-5 章。学生完成本课程后,他们将准备好学习更高级的编程课程。
  • This course covers Python 3.

Chapter 7: Strings | Python for Everybody 讲义笔记_En,# Python for Everybody,python,笔记,学习

coursera

Python for Everybody 零基础程序设计(Python 入门)

Charles Russell Severance
Clinical Professor

Chapter 7: Strings | Python for Everybody 讲义笔记_En,# Python for Everybody,python,笔记,学习

个人主页
Twitter

Chapter 7: Strings | Python for Everybody 讲义笔记_En,# Python for Everybody,python,笔记,学习

University of Michigan


课程资源

coursera原版课程视频
coursera原版视频-中英文精校字幕-B站
Dr. Chuck官方翻录版视频-机器翻译字幕-B站

PY4E-课程配套练习
Dr. Chuck Online - 系列课程开源官网



Strings

We look at how Python stores and manipulates textual data using string variables and functions.


A string is a sequence

A string is a sequence of characters. You can access the characters one at a time with the bracket operator:

>>> fruit = 'banana'
>>> letter = fruit[1]

The second statement extracts the character at index position 1 from the fruit variable and assigns it to the letter variable.

The expression in brackets is called an index. The index indicates which character in the sequence you want (hence the name).

But you might not get what you expect:

>>> print(letter)
a

For most people, the first letter of “banana” is “b”, not “a”. But in Python, the index is an offset from the beginning of the string, and the offset of the first letter is zero.

>>> letter = fruit[0]
>>> print(letter)
b

So “b” is the 0th letter (“zero-th”) of “banana”, “a” is the 1th letter (“one-th”), and “n” is the 2th (“two-th”) letter.


Chapter 7: Strings | Python for Everybody 讲义笔记_En,# Python for Everybody,python,笔记,学习


String Indexes

You can use any expression, including variables and operators, as an index, but the value of the index has to be an integer. Otherwise you get:

>>> letter = fruit[1.5]
TypeError: string indices must be integers

Getting the length of a string using len

len is a built-in function that returns the number of characters in a string:

>>> fruit = 'banana'
>>> len(fruit)
6

To get the last letter of a string, you might be tempted to try something like this:

>>> length = len(fruit)
>>> last = fruit[length]
IndexError: string index out of range

The reason for the IndexError is that there is no letter in “banana” with the index 6. Since we started counting at zero, the six letters are numbered 0 to 5. To get the last character, you have to subtract 1 from length:

>>> last = fruit[length-1]
>>> print(last)
a

Alternatively, you can use negative indices, which count backward from the end of the string. The expression fruit[-1] yields the last letter, fruit[-2] yields the second to last, and so on.

Traversal through a string with a loop

A lot of computations involve processing a string one character at a time. Often they start at the beginning, select each character in turn, do something to it, and continue until the end. This pattern of processing is called a traversal. One way to write a traversal is with a while loop:

index = 0
while index < len(fruit):
    letter = fruit[index]
    print(letter)
    index = index + 1

This loop traverses the string and displays each letter on a line by itself. The loop condition is index < len(fruit), so when index is equal to the length of the string, the condition is false, and the body of the loop is not executed. The last character accessed is the one with the index len(fruit)-1, which is the last character in the string.

Exercise 1: Write a while loop that starts at the last character in the string and works its way backwards to the first character in the string, printing each letter on a separate line, except backwards.

Another way to write a traversal is with a for loop:

for char in fruit:
    print(char)

Each time through the loop, the next character in the string is assigned to the variable char. The loop continues until no characters are left.

String slices

A segment of a string is called a slice. Selecting a slice is similar to selecting a character:

>>> s = 'Monty Python'
>>> print(s[0:5])
Monty
>>> print(s[6:12])
Python

The operator [n:m] returns the part of the string from the “n-th” character to the “m-th” character, including the first but excluding the last.

If you omit the first index (before the colon), the slice starts at the beginning of the string. If you omit the second index, the slice goes to the end of the string:

>>> fruit = 'banana'
>>> fruit[:3]
'ban'
>>> fruit[3:]
'ana'

If the first index is greater than or equal to the second the result is an empty string, represented by two quotation marks:

>>> fruit = 'banana'
>>> fruit[3:3]
''

An empty string contains no characters and has length 0, but other than that, it is the same as any other string.

Exercise 2: Given that fruit is a string, what does fruit[:] mean?

Strings are immutable

It is tempting to use the operator on the left side of an assignment, with the intention of changing a character in a string. For example:

>>> greeting = 'Hello, world!'
>>> greeting[0] = 'J'
TypeError: 'str' object does not support item assignment

The “object” in this case is the string and the “item” is the character you tried to assign. For now, an object is the same thing as a value, but we will refine that definition later. An item is one of the values in a sequence.

The reason for the error is that strings are immutable, which means you can’t change an existing string. The best you can do is create a new string that is a variation on the original:

>>> greeting = 'Hello, world!'
>>> new_greeting = 'J' + greeting[1:]
>>> print(new_greeting)
Jello, world!

This example concatenates a new first letter onto a slice of greeting. It has no effect on the original string.

Looping and counting

The following program counts the number of times the letter “a” appears in a string:

word = 'banana'
count = 0
for letter in word:
    if letter == 'a':
        count = count + 1
print(count)

This program demonstrates another pattern of computation called a counter. The variable count is initialized to 0 and then incremented each time an “a” is found. When the loop exits, count contains the result: the total number of a’s.

Exercise 3: Encapsulate this code in a function named count, and generalize it so that it accepts the string and the letter as arguments.

The in operator

The word in is a boolean operator that takes two strings and returns True if the first appears as a substring in the second:

>>> 'a' in 'banana'
True
>>> 'seed' in 'banana'
False

String comparison

The comparison operators work on strings. To see if two strings are equal:

if word == 'banana':
    print('All right, bananas.')

Other comparison operations are useful for putting words in alphabetical order:

if word < 'banana':
    print('Your word,' + word + ', comes before banana.')
elif word > 'banana':
    print('Your word,' + word + ', comes after banana.')
else:
    print('All right, bananas.')

Python does not handle uppercase and lowercase letters the same way that people do. All the uppercase letters come before all the lowercase letters, so:

Your word, Pineapple, comes before banana.

A common way to address this problem is to convert strings to a standard format, such as all lowercase, before performing the comparison. Keep that in mind in case you have to defend yourself against a man armed with a Pineapple.

String methods

Strings are an example of Python objects. An object contains both data (the actual string itself) and methods, which are effectively functions that are built into the object and are available to any instance of the object.

Python has a function called dir which lists the methods available for an object. The type function shows the type of an object and the dir function shows the available methods.

>>> stuff = 'Hello world'
>>> type(stuff)
<class 'str'>
>>> dir(stuff)
['capitalize', 'casefold', 'center', 'count', 'encode',
'endswith', 'expandtabs', 'find', 'format', 'format_map',
'index', 'isalnum', 'isalpha', 'isdecimal', 'isdigit',
'isidentifier', 'islower', 'isnumeric', 'isprintable',
'isspace', 'istitle', 'isupper', 'join', 'ljust', 'lower',
'lstrip', 'maketrans', 'partition', 'replace', 'rfind',
'rindex', 'rjust', 'rpartition', 'rsplit', 'rstrip',
'split', 'splitlines', 'startswith', 'strip', 'swapcase',
'title', 'translate', 'upper', 'zfill']
>>> help(str.capitalize)
Help on method_descriptor:

capitalize(...)
    S.capitalize() -> str

    Return a capitalized version of S, i.e. make the first character
    have upper case and the rest lower case.
>>>

While the dir function lists the methods, and you can use help to get some simple documentation on a method, a better source of documentation for string methods would be https://docs.python.org/library/stdtypes.html#string-methods.

Calling a method is similar to calling a function (it takes arguments and returns a value) but the syntax is different. We call a method by appending the method name to the variable name using the period as a delimiter.

For example, the method upper takes a string and returns a new string with all uppercase letters:

Instead of the function syntax upper(word), it uses the method syntax word.upper().

>>> word = 'banana'
>>> new_word = word.upper()
>>> print(new_word)
BANANA

This form of dot notation specifies the name of the method, upper, and the name of the string to apply the method to, word. The empty parentheses indicate that this method takes no argument.

A method call is called an invocation; in this case, we would say that we are invoking upper on the word.

For example, there is a string method named find that searches for the position of one string within another:

>>> word = 'banana'
>>> index = word.find('a')
>>> print(index)
1

In this example, we invoke find on word and pass the letter we are looking for as a parameter.

The find method can find substrings as well as characters:

>>> word.find('na')
2

It can take as a second argument the index where it should start:

>>> word.find('na', 3)
4

One common task is to remove white space (spaces, tabs, or newlines) from the beginning and end of a string using the strip method:

>>> line = '  Here we go  '
>>> line.strip()
'Here we go'

Some methods such as startswith return boolean values.

>>> line = 'Have a nice day'
>>> line.startswith('Have')
True
>>> line.startswith('h')
False

You will note that startswith requires case to match, so sometimes we take a line and map it all to lowercase before we do any checking using the lower method.

>>> line = 'Have a nice day'
>>> line.startswith('h')
False
>>> line.lower()
'have a nice day'
>>> line.lower().startswith('h')
True

In the last example, the method lower is called and then we use startswith to see if the resulting lowercase string starts with the letter “h”. As long as we are careful with the order, we can make multiple method calls in a single expression.

Exercise 4: There is a string method called count that is similar to the function in the previous exercise. Read the documentation of this method at:

https://docs.python.org/library/stdtypes.html#string-methods

Write an invocation that counts the number of times the letter a occurs in “banana”.

Parsing strings

Often, we want to look into a string and find a substring. For example if we were presented a series of lines formatted as follows:

From stephen.marquard@ uct.ac.za Sat Jan 5 09:14:16 2008

and we wanted to pull out only the second half of the address (i.e., uct.ac.za) from each line, we can do this by using the find method and string slicing.

First, we will find the position of the at-sign in the string. Then we will find the position of the first space after the at-sign. And then we will use string slicing to extract the portion of the string which we are looking for.

>>> data = 'From stephen.marquard@uct.ac.za Sat Jan  5 09:14:16 2008'
>>> atpos = data.find('@')
>>> print(atpos)
21
>>> sppos = data.find(' ',atpos)
>>> print(sppos)
31
>>> host = data[atpos+1:sppos]
>>> print(host)
uct.ac.za
>>>

We use a version of the find method which allows us to specify a position in the string where we want find to start looking. When we slice, we extract the characters from “one beyond the at-sign through up to but not including the space character”.

The documentation for the find method is available at

https://docs.python.org/library/stdtypes.html#string-methods.

Format operator

The format operator, % allows us to construct strings, replacing parts of the strings with the data stored in variables. When applied to integers, % is the modulus operator. But when the first operand is a string, % is the format operator.

The first operand is the format string, which contains one or more format sequences that specify how the second operand is formatted. The result is a string.

For example, the format sequence %d means that the second operand should be formatted as an integer (“d” stands for “decimal”):

>>> camels = 42
>>> '%d' % camels
'42'

The result is the string ‘42’, which is not to be confused with the integer value 42.

A format sequence can appear anywhere in the string, so you can embed a value in a sentence:

>>> camels = 42
>>> 'I have spotted %d camels.' % camels
'I have spotted 42 camels.'

If there is more than one format sequence in the string, the second argument has to be a tuple1. Each format sequence is matched with an element of the tuple, in order.

The following example uses %d to format an integer, %g to format a floating-point number (don’t ask why), and %s to format a string:

>>> 'In %d years I have spotted %g %s.' % (3, 0.1, 'camels')
'In 3 years I have spotted 0.1 camels.'

The number of elements in the tuple must match the number of format sequences in the string. The types of the elements also must match the format sequences:

>>> '%d %d %d' % (1, 2)
TypeError: not enough arguments for format string
>>> '%d' % 'dollars'
TypeError: %d format: a number is required, not str

In the first example, there aren’t enough elements; in the second, the element is the wrong type.

The format operator is powerful, but it can be difficult to use. You can read more about it at

https://docs.python.org/library/stdtypes.html#printf-style-string-formatting.

Debugging

A skill that you should cultivate as you program is always asking yourself, “What could go wrong here?” or alternatively, “What crazy thing might our user do to crash our (seemingly) perfect program?”

For example, look at the program which we used to demonstrate the while loop in the chapter on iteration:

while True:
    line = input('> ')
    if line[0] == '#':
        continue
    if line == 'done':
        break
    print(line)
print('Done!')

# Code: http://www.py4e.com/code3/copytildone2.py

Look what happens when the user enters an empty line of input:

> hello there
hello there
> # don't print this
> print this!
print this!
>
Traceback (most recent call last):
  File "copytildone.py", line 3, in <module>
    if line[0] == '#':
IndexError: string index out of range

The code works fine until it is presented an empty line. Then there is no zero-th character, so we get a traceback. There are two solutions to this to make line three “safe” even if the line is empty.

One possibility is to simply use the startswith method which returns False if the string is empty.

if line.startswith('#'):

Another way is to safely write the if statement using the guardian pattern and make sure the second logical expression is evaluated only where there is at least one character in the string:

if len(line) > 0 and line[0] == '#':

Glossary

counter
A variable used to count something, usually initialized to zero and then incremented.
empty string
A string with no characters and length 0, represented by two quotation marks.
format operator
An operator, %, that takes a format string and a tuple and generates a string that includes the elements of the tuple formatted as specified by the format string.
format sequence
A sequence of characters in a format string, like %d, that specifies how a value should be formatted.
format string
A string, used with the format operator, that contains format sequences.
flag
A boolean variable used to indicate whether a condition is true or false.
invocation
A statement that calls a method.
immutable
The property of a sequence whose items cannot be assigned.
index
An integer value used to select an item in a sequence, such as a character in a string.
item
One of the values in a sequence.
method
A function that is associated with an object and called using dot notation.
object
Something a variable can refer to. For now, you can use “object” and “value” interchangeably.
search
A pattern of traversal that stops when it finds what it is looking for.
sequence
An ordered set; that is, a set of values where each value is identified by an integer index.
slice
A part of a string specified by a range of indices.
traverse
To iterate through the items in a sequence, performing a similar operation on each.


  1. A tuple is a sequence of comma-separated values inside a pair of parenthesis. We will cover tuples in Chapter 10 ↩︎文章来源地址https://www.toymoban.com/news/detail-550719.html

到了这里,关于Chapter 7: Strings | Python for Everybody 讲义笔记_En的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Python f-strings - PEP 498 - 字面字符串插值

    Python f-strings 或格式化字符串是格式化字符串的新方法。此功能是在 Python 3.6 中引入的,属于 PEP-498。它也被称为 字面字符串插值 。 Python 提供了各种格式化字符串的方式。让我们快速看一下它们以及它们存在的问题。 % 格式化 - 适用于简单的格式化,但对于字符串、整数、

    2024年02月19日
    浏览(44)
  • 模拟集成电路笔记 | 第一部分 | Chapter 1-3

    本系列笔记是参考书籍《CMOS模拟集成电路》和中科大相关课程课件而做成,笔记第一版为手写版,现在在手写版的基础上重新编写第二版(markdown格式)。 如想获得更好的阅读体验,可进入 01-CMOS模拟集成电路笔记 1. MOSFET 的结构(以NMOS为例) 注:n区得保持与 P 型衬底反偏

    2024年02月06日
    浏览(51)
  • Unity学习笔记(零基础到就业)|Chapter03:C#核心

    这系列的学习笔记主要是根据唐老狮的unity实战路线课程整理的,加入了自己的一些补充和理解,该课程涉及的知识内容非常多,我并未学完,而是根据就业需求挑选学习的,也对后续框架部分进行了一些修改,希望能通过整理并时常阅读这些笔记巩固开发知识,也希望能跟

    2024年02月20日
    浏览(54)
  • Python学习笔记:List、Tuple、for循环

    1.list   2.matrix 其实就是list嵌套,可以使用双重for遍历,所包含方法与list一致 3.for循环实例:随机生成一个固定大小的list,并找到list中最大的数和对应的index 4.for循环实例:删除list中重复的元素  5.tuple tuple不可变,但是可以多个tuple拼接组合 6.dictionary {key:value}  7.dictionary

    2024年02月14日
    浏览(48)
  • Python:从入门到实践:chapter2

    我们可以添加一个 变量名 message , 并为这个变量存储一个值(与之相关联的信息) 在程序汇总可随时修改变量的值,而 Python 将始终记录变量的最新值。 字符串就是一系列字符,在 Python中,用 引号括起的都是 字符串, 其中的引号可以是 双引号也可是 单引号。 💚修改字符

    2024年02月02日
    浏览(37)
  • Python:从入门到实践:chapter3

    概念: 列表时由一系列按特定顺序排列的元素组成,你可以创建包含字母表中所有字母,数值或字符串。 也可以将任何其他东西加入列表,元素之间也可以没有任何关系 鉴于列表中通常包含多个原,建议给列表指定一个表示负数的名称 在Python中,用 方括号[ ] 来表示列表

    2024年02月03日
    浏览(41)
  • Golang 中的 strings 包详解(一):strings.Builder

    strings.Builder 是 Golang  中的一个用于高效构建字符串的类型,使用了一个循环缓冲区来存储字符数据,避免了频繁的内存分配和拷贝操作,尤其适用于频繁拼接字符串的场景。结构体定义和对应的方法如下: 其中比较常用的方法有: Reset() :重置 Builder 中的字符串内容,使得

    2024年02月09日
    浏览(52)
  • Golang 中的 strings 包详解(二):strings.Reader

    strings.Reader 是一个实现了 io.Reader、io.Writer、io.ByteReader、io.ByteScanner、io.RuneReader 、io.RuneScanner,、io.Seeker 和 io.WriterTo 接口的结构体,用于从字符串中高效读取数据。strings.Reader 可以将一个字符串包装成一个可读流,方便地将字符串中的数据读取到应用程序中。结构体定义和

    2024年02月09日
    浏览(39)
  • 《斯坦福数据挖掘教程·第三版》读书笔记(英文版)Chapter 11 Dimensionality Reduction

    来源:《斯坦福数据挖掘教程·第三版》对应的公开英文书和PPT Let M be a square matrix. Let λ be a constant and e a nonzero column vector with the same number of rows as M . Then λ is an eigenvalue of M and e is the corresponding eigenvector of M if M e = λ e Me = λe M e = λ e . Start with any unit vector v of the appropriate lengt

    2024年02月07日
    浏览(46)
  • 《斯坦福数据挖掘教程·第三版》读书笔记(英文版) Chapter 6 Frequent Itemsets

    来源:《斯坦福数据挖掘教程·第三版》对应的公开英文书和PPT The market-basket model of data is used to describe a common form of many-many relationship between two kinds of objects. On the one hand, we have items , and on the other we have baskets, sometimes called “ transactions .” Each basket consists of a set of items (an items

    2024年02月06日
    浏览(54)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包