Nauč se Python > Kurzy > Beginners course PyLadies > Strings > Strings

Strings

Now we will learn about strings. You already know how to write them in Python code.

'This is string'
"And this is also string"

Sometimes you will need a string that is multiple lines long. But you can write strings only on one line in Python (you can actually write on more lines but the text would appear on just one).

In your text, you can use a special character that means new line \n:

print('Hello word\nHow are you?')

A backslash allows us to write characters which we can't easily write on the keyboard. The backslash also allows us to use both types of quotes in one piece of text.

print('"Don\'t do it", said dad.')
print("\"Don't do it\", said dad.")

Backward slashes can also insert exotic characters that you do not have on the keyboard. Fancy characters can be written as \N and a character name in compound ("curly") braces. Try for example the following characters (some might not work for your system):

print('--\N{LATIN SMALL LETTER L WITH STROKE}--')
print('--\N{SECTION SIGN}--')
print('--\N{PER MILLE SIGN}--')
print('--\N{BLACK STAR}--')
print('--\N{SNOWMAN}--')
print('--\N{KATAKANA LETTER TU}--')

If you want to write a backslash character in your text you have to write it twice (for example, in a path to a file in Windows). So the sequence \\ means one backslash.

print('C:\\PyLadies\\New Folder')

But back to multi-line strings. There is also another way how to write them in Python. You just have to wrap them in three single or three double quotes:

basen = '''Hello World!
How are you?'''

Programmers also use three quotes to document their functions.

def multiply(a, b):
    """ This function multiplies two arguments and returns the result.

    Both arguments should be numbers.
    """

    return a * b

Now we will have a look at how to work with strings.

Subscripting

You already know how to concatenate strings by addition and multiplication.

concatenated_string = 'a' + 'b'
long_string = 'o' * 100

Now we will learn how we can get part of a string. We will start with single characters. This is done by subscripting. The Syntax looks similar to calling a function but with square brackets.

fifth_character = 'PyLadies'[5]

print(fifth_character)

Does it work? Did you really get the fifth character?

Řešení

As you may have already noticed, programmers start counting from zero. First comes 0, then 1, and so on.

It's the same with strings - the first character is on position zero.

Why is it like that? You would have to know about pointers and arrays to fully understand, so now let's just assume that programmers are weird. Or that they just like weird numbers.

   [0] [1] [2] [3] [4] [5] [6] [7]

  ╭───┬───┬───┬───┬───┬───┬───┬───╮
  │  P │ y │ L │ a │ d │ i │ e │ s │
  ╰───┴───┴───┴───┴───┴───┴───┴───╯

What happens if you pick characters with negative numbers?

Řešení

Strings can do more tricks. You can find out how long the string is, or if it contains a certain substring.

Code Description Example
len(r) Length of string len('PyLadies')
x in r True if the string x is in the string r 'Ladies' in 'PyLadies'
x not in r The opposite of x in r 'eye' not in 'PyLadies

Python is case sensitive, so ladies in PyLadies is False. If you want to do a case insensitive test, you would have to change the case of both strings (both to lower, or both to upper) and then do x in y.

And how to change the case of our string? To do that, we will need another Python feature: methods.

Methods

Methods are like functions - we can call something with them. Unlike a function, a method is tied to some object (value). It is called by writing a colon and a method name just after the object. And then, of course, parentheses, which may contain arguments.

The String methods upper() and lower() change the case.

string = 'Hello'
print(string.upper())
print(string.lower())
print(string)

Notice that the original string has not changed. Methods return a new string and the old string stays as it was.

That is Python's standard behavior: already existing string can't be changed, we can only create a new one - derived from the old one.

Initials

For practicing methods and subscripting, try to write a program, which will ask the user for their name, then their surname and then it will print their initials - the first letters of name and surname.

Initials are always upper case (even if the user won't write it that way).

Řešení

There are many more string methods. You can find the most useful ones in our cheatsheet.

All methods are in the Python documentation.

Notice that len isn't a method but a function. It's written len(s) not r.len(). You will find out why it is like that in a minute.

Formatting

Especially useful is the format method, which replaces a pair of curly braces in string for whatever it gets as an argument.

write = '{}×{} equals {}'.format(3, 4, 3 * 4)
print(write)

The String '{}×{} equals {}' is something like a template. Imagine it as form, where we have highlighted fields where Python fills in values.

If you want to fill values in a different order, or you want the template to be clearer, you can write variables into your curly braces:

write = 'Hi {name}! The result is {number}.'.format(number=7, name='Mary')
print(write)

Formatting is used when you need to include a variable value in the string.

number = 3 + 4
name = "Mary"
write = 'Hi {}! The result is {}.'.format(name, number)
print(write)

It is almost the same as the old fashioned %s, but instead of .format you write %. If you want to use just one variable, you don't need parenthesis, just make sure that there is one space after the %.

number = 3 + 4
name = "Mary"
write = 'Hi %s! The result is %s.' % (name, number)
print(write)

Substrings

Now we will go back to subscripting. Try to find out what the following program does:

string = 'PyLadies'
substring = string[5:]
print(substring)

Keep in mind that we are still counting from 0!

Řešení

We can also use string[:5], which will select all characters up to the fifth character, which is not included. So string[:5] + string[5:] == string.

What does string[2:5] do?

And what about string[-4:]?

string = 'PyLadies'
print(string[:4])
print(string[2:5])
print(string[-4:])

You have to think about which number, which index, you want to use.

It is better to think of these numbers as being on the borderlines between characters, it makes it easier to understand:

 ╭───┬───┬───┬───┬───┬───┬───┬───╮
  │ P │ y │ L │ a │ d │ i │ e │ s │
  ├───┼───┼───┼───┼───┼───┼───┼───┤
  │   │   │   │   │   │   │   │   │
  0   1   2   3   4   5   6   7   8
 -8  -7  -6  -5  -4  -3  -2  -1

  ╰───────────────╯
  'PyLadies'[:4] == 'PyLa'

          ╰───────────────╯
        'PyLadies'[2:6] == 'Ladi'

                      ╰───────────╯
                      'PyLadies'[-3:] == 'ies'

Exercise

Try to write a function change(string, position, character).

This function returns a string which inserts the given character into the given position. The rest is the same as the original string. For example:

change('doctor', 2, 'g') == 'dogtor'
change('slice', 1, 'p') == 'spice'

Keep in mind that you can't change a string. You can only create a new one and put together pieces from the old one.

Řešení


Toto je stránka lekce z kurzu, který probíhá nebo proběhl naživo s instruktorem.