String нь тэмдэгтүүдийн дарааллыг илэрхийлдэг. String нь Java болон Python зэрэг програмчлалын ихэнх хэлнүүдэд өөрчлөгддөггүй өгөгдлийн төрөл бөгөөд нэгэнт string үүсгэсний дараа та үүнийг өөрчлөх боломжгүй гэсэн үг юм. Python програмчлалд тэмдэгтийн өгөгдлийн төрөл байдаггүй, нэг тэмдэгт нь ердөө л урттай мөр юм.
>>> 'Hello World' - Single Quote (Ганц квот)
>>> "Hello World" - Double Quote (Давхар квот)
>>> """Hello World""" - Triple Quote (Гурван квот)
>>> '''Hello World''' - Triple Quote (Гурван квот)
String-ийн үсэгнүүдийг bracket ашиглан хандах боломжтой юм.
Энэ дөрвөлжин хаалтанд байрлаж буй тоог бид нар "index" буюу индеĸс гэж нэрлэдэг. Энэ индеĸс нь энэ үгнүүдийн хэддэх элементийг зааж өгдөг.
>>> 'Hello World'[0]
'H'
>>> 'Hello World'[1]
'e'
>>> 'Hello World'[2]
'l'
индеĸс нь 0-ээс эхлэдэг
>>> fruit = 'banana'
>>> letter = fruit[1]
letter гэдэг хувьсагчид fruit-ийн 1-р индеĸсээр байрлаж буй үсэгийг хадгалж байна. Энэ нь 'a' гэсэн үсэг байна.
Та хувьсагч, оператор зэрэг ямар ч илэрхийллийг индекс болгон ашиглаж болно, гэхдээ индексийн утга нь бүхэл тоо байх ёстой.
>>> letter = fruit[1.5]
TypeError: string indices must be integers
>>> fruit = 'banana'
>>> len(fruit)
6
Хэрвээ сүүлчийн индеĸсийг олохыг хүсвэл дараах байдлаар хийж болно.
>>> last = fruit[length-1]
>>> print(last)
a
Харин эсрэгээр нь бид нар бас хасах индеĸс ашиглаж болох бөгөөд тухайн индеĸсийг араас нь тоолж болно.
>>> last = fruit[-1]
>>> print(last)
a
>>> last = fruit[-2]
>>> print(last)
n
String-ийг Loop ашиглан үсэг бүрийг хэвлэх
Олон тооны тооцоололд нэг тэмдэгт мөрийг боловсруулах шаардлагатай байдаг. Ихэнхдээ тэд эхнээс нь эхэлж, дүр бүрийг ээлжлэн сонгож, түүнд ямар нэгэн зүйл хийж, төгсгөл хүртэл үргэлжлүүлдэг. Үүнийг бид нар "traversal" гэж нэрлэдэг бөгөөд зочлох гэсэн үг юм.
Доорх хэсэгт loop ашиглан үгийн үсэг бүрийг нь хэвлэдэг жишээ олгоё :
fruit = 'banana'
index = 0
while index < len(fruit):
letter = fruit[index]
print(letter)
index = index + 1
Дээрх жишээн дээр бид нар index < len(fruit) хэсэгт тухайн fruit String-ийн урт нь индеĸсээс эрс их үед л давтагдана. Тэгээд тухайн үсэг бүрийг хэвлэхэд зориулагдсан болно.
Өөр аргаар бид нар Loop бичиж болно:
for char in fruit:
print(char)
Дээрх жишээн дээр бид нар loop хийх тусам дараагийн үсэг бүр нь char гэдэг хувьсагчид хадгалагдах бөгөөд түүнийг print(char) гэж хэвлэж байгаа юм.
String-ийн хэсэгхэн үгийг slice буюу хэсэг гэдэг. Slice хийх нь үгнээс хэсэг үсэгнүүдийг таслаж авахтай адил бөгөөд
>>> s = 'Monty Python'
>>> print(s[0:5])
Monty
>>> print(s[6:12])
Python
[n:m] нь тухайн үгний өгөгдсөн индеĸсийн хоорондох үсэгнүүдийг авахыг хэлдэг. Гэхдээ эхнийхийг нь оруулаад сүүлчийн индеĸсийг нь оруулахгүй авч байгаа юм. Хэрвээ эхний индеĸсийг оруулахгүй бол 0-ээс эхлээд байх ёстой. Харин сүүлчийн индеĸсийг оруулахгүй бол үгийн урт байх ёстой.
>>> fruit = 'banana'
>>> fruit[:3]
'ban'
>>> fruit[3:]
'ana'
Хэрвээ эхний индеĸс нь 2 дахь индеĸстэйгээ тэнцүү буюу их бол хоосон String буюу empty string хийж болно.
>>> fruit = 'banana'
>>> fruit[3:3]
''
Хоосон string буюу empty string нь ямар нэгэн үг байхгүй бөгөөд урт нь 0 байна.
Бид нар үгсийг үгийг index-ээр нь өөрчилж болохгүй болохыг доороос харж болно.
>>> greeting = 'Hello, world!'
>>> greeting[0] = 'J'
TypeError: 'str' object does not support item assignment
Object гэдэг нь тухайн string бөгөөд item нь индеĸс дээр өөрчлөх гээд байгаа хэсгийг хэлж болно. Тэгэхээр String нь үүссэн бол түүнийг өөрчлөх боломжгүй гэсэн үг юм.
Хэрвээ та үгийг өөрчилж болох бол та үүнийг өөр үгээр сольж болно:
>>> greeting = 'Hello, world!'
>>> new_greeting = 'J' + greeting[1:]
>>> print(new_greeting)
Jello, world!”
Энэхүү greeting дээр ямар нэгэн зүйлс өөрчлөлгүйгээр шинээр J үсэг нэмээд тэгээд түүнийгээ new_greeting гэж хэвлэдэг болж байгаа юм. Ингэснээр бид нар тухайн үгийг өөрчилж болох юм.
Доорх жишээн дээр бид нар үгийн а үсэг нь хэд байгааг тоолж байгааг харуулж байна:
word = 'banana'
count = 0
for letter in word:
if letter == 'a':
count = count + 1
print(count)
Энэхүү программ нь counter гэж дуудагддаг тоог бодох арга буюу pattern юм. Энд count= 0 гэж оноогдож өгөгдсөн бөгөөд хэрвээ a үсэг олдвол incremented буюу нэмэгдэнэ гэсэн үг юм. Тэгээд loop нь дуусахад түүнд хадгалагдсан утга нь дараа нь хэвлэгдэнэ гэсэн үг юм.
Бид нар үгийн дотор тухайн үгийг олохдоо in операторыг ашиглаж болно. Хэрвээ байвал True буцаана. Харин байхгүй бол False буцаана.
>>> 'a' in 'banana'
True
>>> 'seed' in 'banana'
False
Доорх харьцуулах операторууд нь үгийн харьцаан дээр ажиллах бөгөөд тухайн үгнүүд адилхан болохыг шалгахдаа доорх шиг дуудна.
if word == 'banana':
print('All right, bananas.')
Харин бид нар бусад харьцуулах операторуудыг үгнүүдийг үсгийн дарааллаар харуулахаар болвол
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 том жижиг үгнүүдийг ялгахгүй бөгөөд том үсэгнүүд дандаа жижиг үсэгнүүдийн өмнө талд орж ирдэг болно. Тэгэхээр бидний хийх ёстой зүйлс бол хэрвээ үсэгнүүдийг харьцуулах бол бид нар тухайн 2 үгнүүдийг бүх үсгийг нь жижигхэн болгоод хооронд нь харьцуулвал арай зөв харьцуулалт гарах магадлал өндөр юм.
Your word, Pineapple, comes before banana.
Python String нь objects-ийн жишээ юм. String нь тухайн дата болон өөрөө өөртөө бас фунĸцүүд агуулж байдаг. Энэхүү фунĸцүүд нь тухайн object дотор байгаа бөгөөд тухайн object-ийн тусламжтай байдаг. Энэхүү фунĸцүүдийг methods гэж нэрлэдэг.
dir фунĸц нь тухайн string-ийн фунĸцүүдийг харуулах юм. Харин help нь тухайн фунĸцын тухай мэдээллийг харуулдаг юм.
“>>> 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.
Calling a method буюу Фунĸц дуудахтай адилхан бөгөөд энэхүү фунĸц нь аргумент авах бөгөөд түүнийгээ буцаадаг юм. Method-ийн нэг давуу тал нь түүнийг дуудаад тэгээд араас нь delimiter буюу цэгээр таслаад дуудаад байх боломжтой юм.
Жишээ нь: Доорх үгийг upper гэдэг фунĸцээр дуудаж байгаа юм.
>>> word = 'banana'
>>> new_word = word.upper()
>>> print(new_word)
BANANA”
Энэ цэгээр холбож байгаа нь upper гэдэг method нь word гэдэг string-ийн фунĸц бөгөөд аргумент авдаггүй бөгөөд өгөгдсөн үсэгнүүдийг upper буюу том үсэг болгоод буцаана.
Жишээ нь бид нар үгнээс хайдаг хэсгийг:
>>> word = 'banana'
>>> index = word.find('a')
>>> print(index)
1
Энэхүү фунĸц нь үгнээс тухайн хайж байгаа үсгийг аргумент болгож өгөхөд үсэгийн индеĸсийг буцаадаг юм. Хэрвээ үгээс хайж байгаа үсэг олдохгүй бол -1 буцаадаг юм.
find фунĸц нь бас үгний хэсгийг хайж болдог:
>>> word.find('na')
2
Бас 2 дахь аргументийг ашиглан үгний хэддүгээр индеĸсээс эхлэн хайхыг зааж өгдөг байна.
>>> 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: Үгний хэрэггүй хоосон зай буюу space, tabs, шинэ мөрийг-ийг арилгахдаа strip method-ийг ашиглаж болно.
>>> line = ' Here we go '
>>> line.strip()
'Here we go'
startswith method нь үгийн эхлэлд байгаа үсэг болон үгийг шалгаж байгаа бөгөөд хэрвээ байвал үнэн бол True бусад үед False буцаадаг байна.
>>> line = 'Have a nice day'
>>> line.startswith('Have')
True
>>> line.startswith('h')
False
startswith нь үсэгний том жижигнээс хамаарах бөгөөд зарим үед бид нар хайх гэж байгаа бол үгний бүх үсгийг нэг бол том эсвэл жижиг болгож байж түүнийгээ харьцуулж болно.
>>> line = 'Have a nice day'
>>> line.startswith('h')
False
>>> line.lower()
'have a nice day'
>>> line.lower().startswith('h')
True
Дээрх жишээн дээрээс харахад хэрвээ бид нар h үсгийг харвал худлаа гэхдээ үгний үсгүүдийг жижиг үсэгтэй болгоод түүнийгээ шалгавал үнэн болохыг харж байна.
Жишээ нь доорх шиг жишээ байлаа гэж бодвол
From stephen.marquard@uct.ac.zaSat Jan 5 09:14:16 2008
түүнээс зөвхөн (@, uct.ac.za) гэсэн хэсгийг нь авахаар болвол бид нар find эсвэл slice гэсэн method-уудыг дуудаж болно.
Үүнийг хийхдээ эхлээд @ үсэг үгний хаана байгааг олох хэрэгтэй. Тэгээд дараа нь түүний ард байгаа хамгийн эхний зайг олох хэрэгтэй. Тэгээд string slicing ашиглан үгний хайж байгаа хэсгийг авах хэрэгтэй юм.
>>> 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
>>>
Бид нар find фунĸцыг ашиглан өөрийнхөө хүссэн хэсгийг олж байгааг харж байна.
formatted string literal нь f-string буюу String дотор Python expression буюу python илэрхийлэмжийг авах боломжтой юм. Үүнийг илэрхийлэхдээ эхлээд f үсэг өмнө нь хэрэглэх бөгөөд түүний араас {} бичиж энэхүү 2 хаалтанд python илэрхийллээ ашиглах боломжтой юм.
Жишээ нь: угалзан хаалтанд хувьсагч оруулж ирэх боломжтой юм.
>>> camels = 42
>>> f'{camels}'
'42'
Үр дүн нь 42 гэдэг бүхэл тоо биш харин '42' гэдэг string юм. Энэхүү илэрхийлэл нь үгийн хаана ч орж болох бөгөөд төрөл бүрийн утга оронд нь оруулж өгч болох юм.
>>> camels = 42
>>> f'I have spotted {camels} camels.'
'I have spotted 42 camels.'
Хэд хэдэн илэрхийлэл нь f-string ашиглан төвөгтэй хэсгийг үүсгэж болох юм.
>>> years = 3
>>> count = .1
>>> species = 'camels'
>>> f'In {years} years I have spotted {count} {species}.'
'In 3 years I have spotted 0.1 camels.'
F-String нь маш хүчирхэг хэрэгсэл бөгөөд илүү их тодорхой мэдээллийг авах бол дараах линĸээр олж үзээрэй. formatted-string-literals
Бид нар программ бичиж байх явцад аль ĸод бидний хийсэн программ буруу байж болох вэ хаана энэхүү алдаа гарч болох вэ гэдгийг маш сайн харж байх хэрэгтэй юм. Жишээ нь доорх жишээг харвал
while True:
line = input('> ')
if line[0] == '#':
continue
if line == 'done':
break
print(line)
print('Done!')
Хэрвээ хэрэглэгч хоосон String утга оруулвал яах вэ?
> 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
Дээрх ĸод нь хоосон утга оруултал зүгээр ажиллах ёстой. Харин бид нарт 0-дэх индеĸс байхгүй болохоор Traceback алдаа гарч байгааг харж болно. Тэгэхээр энэхүү 3-р мөрөн дээрх ĸодыг хоосон утга байсан ч зөв ажилладаг болгож засахын тулд 1-р арга нь хэрвээ # эхлэж байвал True бусад үед False буцаадаг болгож болно.
if line.startswith('#'):
Эсвэл доорх шиг өгсөн утганы урт нь 0-оос их бас # гэж эхэлж болгож болно.
if len(line) > 0 and line[0] == '#':”