Permalink
Switch branches/tags
Nothing to show
Find file Copy path
9edf62d Oct 14, 2018
1 contributor

Users who have contributed to this file

451 lines (322 sloc) 10.3 KB

Character Types

str

Creating empty string

  • " and ' works the same
  • Unicode characters (UTF-16 or UTF-32, depending on how Python was compiled)
name = ''
name = ""

name: str = ''
name: str = ""

Creating string

name = 'José'       # 'José'
name = "José"       # 'José'

name: str = 'José'  # 'José'
name: str = "José"  # 'José'

Multiline str

names = """
    We choose to go to the Moon!
We choose to go to the Moon in this decade and do the other things, not because they are easy, but because they are hard.
"""

print(names)
# '\n    We choose to go to the Moon!\nWe choose to go to the Moon in this decade and do the other things, not because they are easy, but because they are hard.'

Type casting to str

str(1969)           # '1969'
str(13.37)          # '13.37'

Single or double quote?

  • " and ' works the same
  • Choose one and keep consistency in code
  • Python console uses '
  • I use ' in this book to be consistent with Python
  • doctest uses single quotes and throws error on double quotes

When use double quotes?

my_str = 'it\'s José\'s book'
my_str = "it's José's book"

When use single quotes?

  • HTML and XML uses double quotes
my_str = '<a href="http://python.astrotech.io">Python and Machine Learning</a>'

Escape characters

New lines

\n
\r\n
img/type-machine.jpg

Why we have '\r\n' on Windows?

Other escape characters

\x1F680     # after \x goes hexadecimal number
\U0001F680  # after \u goes four hexadecimal numbers
🚀

Characters before strings

  • Format string: since Python 3.6
  • str is a unicode
  • In Python3 u'..' = '...'
  • bytes is a sequence of octets (integers between 0 and 255)
name = 'José Jiménez'

f'My name... {name}'
u'zażółć gęślą jaźń'
b'this is bytes literals'
r'(?P<foo>)\n'
r'C:\Users\Admin\file.txt'
print('C:\Users\Admin\file.txt')
# SyntaxError: (unicode error) 'unicodeescape' codec can't decode bytes in position 2-3: truncated \UXXXXXXXX escape

# Problem: ``\Users``
#          ``s`` is invalid hexadecimal character
#          after ``\U...`` python expects unicode codepoint

print()

  • print() adds '\n' at the end

  • Prints on the screen

    print('My name... José Jiménez')
    # My name... José Jiménez
  • Variable substitution

    name = 'José Jiménez'
    
    print(f'My name... {name}')
    # My name... José Jiménez
  • Special characters

    print(f'My name...\n\t{name}')
    # My name...
    #     José Jiménez

String methods

String immutability

  • str is immutable
  • str methods create a new modified str
a = 'Python'
a.replace('P', 'J')

print(a)            # Python
a = 'Python'
b = a.replace('P', 'J')

print(a)            # Python
print(b)            # Jython
a = 'Python'
b = a.upper().replace('P', 'C').title()

print(a)            # Python
print(b)            # Cython

Multiplication

'José' * 3          # JoséJoséJosé
'-' * 10            # ----------

str.title(), str.lower(), str.upper()

  • Unify data format before analysis

    name = 'joSé jiMénEz III'
    
    name.title()    # 'José Jiménez Iii'
    name.upper()    # 'JOSÉ JIMÉNEZ III'
    name.lower()    # 'josé jiménez iii'

str.replace()

name = 'José Jiménez Iii'
name.replace('Iii', 'III')  # 'José Jiménez III'

strip(), lstrip(), rstrip()

name = '\tMark Watney    \n'

name.rstrip()       # '\tMark Watney'
name.lstrip()       # 'Mark Watney    \n'
name.strip()        # 'Mark Watney'

str.startswith() and str.endswith()

  • Understand this as "starts with" and "ends with"
name = 'José Jiménez'

name.startswith('José')
# True

name.endswith(';')
# False

str.split()

text = 'José Jiménez'
text.split()        # ['José', 'Jiménez']

text = 'jimenez:x:0:0:José Jiménez:/home/jimenez:/bin/bash'
text.split(':')     # ['jimenez', 'x', '0', '0', 'José Jiménez', '/home/jimenez', '/bin/bash']

str.join()

names = ['jimenez', 'x', '0', '0', 'José Jiménez', '/home/jimenez', '/bin/bash']

':'.join(names)
# 'jimenez:x:0:0:José Jiménez:/home/jimenez:/bin/bash'

str.isspace()

''.isspace()    # False
' '.isspace()   # True
'\t'.isspace()  # True
'\n'.isspace()  # True

str.isnumeric(), str.isdigit(), str.isdecimal()

'10'.isnumeric()    # True
'10.5'.isnumeric()  # False

'10'.isdigit()      # True
'10.5'.isdigit()    # False

'10'.isdecimal()    # True
'10.5'.isdecimal()  # False

str.isalpha()

'hello'.isalpha()   # True
'hello1'.isalpha()  # False

str in str

'th' in 'Python'     # True
'hello' in 'Python'    # False

len()

len('Python')   # 6
len('')         # 0
len()           # TypeError: len() takes exactly one argument (0 given)

Handling user input

  • input() returns str
  • Space at the end of prompt
name = input('Type your name: ')
  • This is a dump of distinct records of a single address

  • Is this the same address?:

    'ul. Jana III Sobieskiego'
    'ul Jana III Sobieskiego'
    'ul.Jana III Sobieskiego'
    'ulicaJana III Sobieskiego'
    'Ul. Jana III Sobieskiego'
    'UL. Jana III Sobieskiego'
    'ulica Jana III Sobieskiego'
    'Ulica. Jana III Sobieskiego'
    
    'os. Jana III Sobieskiego'
    
    'Jana 3 Sobieskiego'
    'Jana 3ego Sobieskiego'
    'Jana III Sobieskiego'
    'Jana Iii Sobieskiego'
    'Jana IIi Sobieskiego'
    'Jana lll Sobieskiego'  # three small letters 'L'
    
    'ul '
    'ul. '
    'ul.'
    'ulica'
    'Ul. '
    'UL. '
    'ulica '
    'Ulica. '
    'os. '
    'ośedle'
    'osiedle'
    'os'
    'plac '
    'pl '
    'al '
    'al. '
    'aleja '
    'alei '
    
    '1/2'
    '1 / 2'
    '1 m. 2'
    '1 apt 2'
    '1 apt. 2'
    
  • Which one is a true address?

Assignments

String cleaning

  1. Dane poniżej przeczyść, tak aby zmienne miały wartość 'Jana III Sobieskiego'
  2. Jak zrobić to rozwiązaniem generycznym pasującym do wszystkich? (dyskusja)
a = 'Jana III Sobieskiego 1 apt 2'
b = 'ul Jana III SobIESkiego 1/2'
c = 'ul. Jana trzeciego Sobieskiego 1/2'
d = 'ul.Jana III Sobieskiego 1/2'
e = 'ulicaJana III Sobieskiego 1/2'
F = 'UL. JANA 3 SOBIESKIEGO 1/2'
G = 'UL. III SOBiesKIEGO 1/2'
H = 'ULICA JANA III SOBIESKIEGO 1/2'
I = 'ULICA. JANA III SOBI'
j = ' Jana 3 Sobieskiego 1/2 '
k = 'Jana III Sobieskiego 1 m. 2'
l = ' 1/2'

Variables and types

  1. Wczytaj od użytkownika imię

  2. Za pomocą f-string formatting wyświetl na ekranie:

    '''My name... "José Jiménez".
            I'm an """astronaut!"""'''
    
  3. Uwaga! Druga linijka zaczyna się od tabulacji

  4. Gdzie wartość w podwójnym cudzysłowiu to ciąg od użytkownika (w przykładzie użytkownik wpisał José Jiménez)

  5. Zwróć uwagę na znaki apostrofów, cudzysłowów, tabulacji i nowych linii

  6. W ciągu do wyświetlenia nie używaj spacji ani enterów - użyj \n i \t

  7. Tekst wyświetlony na ekranie ma mieć zamienione wszystkie spacje na _

  8. Tekst wyświetlony na ekranie ma być w UPPERCASE

  9. Nie korzystaj z dodawania stringów (str + str)

  10. Następnie znów wyświetl na ekranie wynik, tym razem z podmienionymi spacjami:

    '''MY_NAME_"JOSÉ_JIMÉNEZ".
    _I'M_AN_"""ASTRONAUT!"""'''
    
About:
  • Filename: types_input.py
  • Lines of code to write: 4 lines
  • Estimated time of completion: 10 min
The whys and wherefores:
  • Definiowanie zmiennych
  • Korzystanie z print formatting
  • Wczytywanie tekstu od użytkownika