Mundarija (23)
- 1. Kirish va motivatsiya
- 2. Nazariya — chuqur tushuntirish
- 2.1. Fayl nomi qoidalari
- 2.2. Dastur tuzilmasi — qaysi tartibda
- 2.3. if __name__ == "__main__" — nima bu
- 2.4. main() funksiyasi — nega u kerak
- 2.5. __pycache__ — bu nima va nima qilish kerak
- 2.6. Ishga tushirishning barcha usullari
- 2.7. Dasturga ma'lumot berish: sys.argv
- 2.8. Chiqish kodi — dastur qanday tugadi
- 2.9. Kodlash va o'zbekcha matn
- 3. Tez ma'lumotnoma
- 4. Batafsil misollar
- Misol 1 — Birinchi to'liq dastur
- Misol 2 — __name__ ni o'z ko'zingiz bilan ko'rish
- Misol 3 — Argumentlar bilan ishlaydigan dastur
- Misol 4 — __pycache__ ni kuzatish
- 5. To'g'ri va noto'g'ri tushunishlar
- 6. Keng tarqalgan xatolar va yechimlari
- 7. Integratsiya — bu bilim qayerda kerak bo'ladi
- 8. Eng yaxshi amaliyotlar
- 9. Amaliy topshiriq
- Xulosa
2.8-dars: Birinchi .py fayl va uni ishga tushirish
2-QISM — MUHIT VA VOSITALAR · 8-dars
1. Kirish va motivatsiya
Yetti dars nazariya va tayyorgarlikdan keyin — nihoyat.
Bu darsda birinchi haqiqiy dasturingizni yozasiz. "Haqiqiy" deganda: bir qatorlik print emas, balki foydalanuvchi bilan gaplashadigan, ma'lumot qabul qiladigan, hisoblaydigan va natija beradigan dastur.
Lekin dars faqat kod yozishdan iborat emas. Biz dastur qanday tuzilishi kerakligini ham o'rganamiz:
- fayl nomi qanday bo'lsin va nega
- kod ichida qanday tartib bo'lsin
if __name__ == "__main__"nima va nega hamma joyda uchraydi__pycache__papkasi qayerdan paydo bo'ldi- dasturga terminal orqali ma'lumot berish
- dastur qanday "muvaffaqiyat" yoki "xato" bilan tugaydi
Bu tafsilotlar boshida ortiqcha tuyulishi mumkin. Lekin ular — professional kod bilan havaskor kod orasidagi farq. Va ularni hozir o'rganish keyin qayta o'rganishdan oson.
2. Nazariya — chuqur tushuntirish
2.1. Fayl nomi qoidalari
Python fayli nomi shunchaki nom emas — u modul nomi ham bo'ladi. import salom yozganingizda Python salom.py faylini qidiradi.
Shuning uchun qoidalar qat'iy:
| Qoida | To'g'ri | Noto'g'ri |
|---|---|---|
| Faqat kichik harf | main.py |
Main.py |
So'zlar orasida _ |
hisob_kitob.py |
hisob-kitob.py |
| Bo'sh joy yo'q | test_kod.py |
test kod.py |
| Raqam bilan boshlanmasin | dars_01.py |
01_dars.py |
| Standart nomlarni band qilmang | mening_json.py |
json.py |
Oxirgisi — jiddiy tuzoq. Agar faylingiz nomi random.py bo'lsa:
import random
print(random.randint(1, 10))AttributeError: module 'random' has no attribute 'randint'Python sizning random.py faylingizni topdi — standart kutubxonanikini emas. Chunki joriy papka qidiruv yo'lida birinchi turadi.
Band qilmaslik kerak bo'lgan nomlar: random, json, time, math, string, email, test, types, code, os, sys.
-(chiziqcha) nega taqiqlangan? Chunki Pythonda-ayirish operatori.import hisob-kitob"hisob minus kitob" deb o'qiladi va sintaksis xatosi beradi.
2.2. Dastur tuzilmasi — qaysi tartibda
Professional Python fayli quyidagi tartibda yoziladi:
"""Modul haqida qisqacha — nima qiladi.
Bu — docstring. Uch tirnoq ichida yoziladi va faylning
birinchi narsasi bo'ladi.
"""
# 1. Standart kutubxona importlari
import sys
from datetime import datetime
# 2. Tashqi kutubxona importlari (bo'sh qator bilan ajratiladi)
import requests
# 3. O'z modullaringiz
from mening_kodim import yordamchi
# 4. Doimiylar (KATTA HARF bilan)
SOLIQ_FOIZI = 0.12
MAKSIMAL_URINISH = 3
# 5. Funksiyalar va sinflar
def hisobla(summa):
return summa * SOLIQ_FOIZI
# 6. Asosiy kod
def main():
print(hisobla(1_000_000))
if __name__ == "__main__":
main()Bu tartib — PEP 8 tavsiyasi (3.14-darsda batafsil). Nega muhim?
- Importlar yuqorida — faylni ochgan kishi nimaga bog'liqligini darhol ko'radi
- Doimiylar bir joyda — o'zgartirish kerak bo'lsa, izlash shart emas
- Funksiyalar oldin, chaqiruv keyin — Python faylni yuqoridan pastga o'qiydi, funksiya chaqirilishidan oldin aniqlangan bo'lishi kerak
Yaxshi xabar:
ruffimportlarni o'zi tartiblaydi (2.7-dars). Siz faqat mantiqiy tuzilmani o'ylaysiz.
2.3. if __name__ == "__main__" — nima bu
Bu qator har bir Python loyihasida uchraydi va boshlovchilarni chalkashtiradi.
Muammo nima?
Faylni ikki xil ishlatish mumkin:
- To'g'ridan-to'g'ri ishga tushirish:
python3 main.py - Boshqa fayldan import qilish:
import main
Ikkala holatda ham Python butun faylni bajaradi. Ya'ni import qilganingizda ham fayldagi barcha print ishlaydi. Bu — kutilmagan.
Misol:
salomlash.py:
def salom(ism):
return f"Salom, {ism}!"
print(salom("Ali")) # bu qator import paytida ham ishlaydiasosiy.py:
import salomlash # faqat funksiyani olmoqchi edik
print("Asosiy dastur")python3 asosiy.pySalom, Ali! ← kutilmagan! biz buni so'ramagan edik
Asosiy dasturYechim:
Python har bir modulga __name__ degan maxsus o'zgaruvchi beradi:
| Vaziyat | __name__ qiymati |
|---|---|
| Fayl to'g'ridan-to'g'ri ishga tushirilgan | "__main__" |
| Fayl import qilingan | modul nomi ("salomlash") |
Shuning uchun:
def salom(ism):
return f"Salom, {ism}!"
if __name__ == "__main__":
print(salom("Ali")) # FAQAT to'g'ridan-to'g'ri ishga tushirilgandaEndi import salomlash hech narsa chiqarmaydi — faqat funksiyani beradi.
Amaliy qoida:
Fayl ishga tushiriladigan kodni doim
if __name__ == "__main__":ichiga qo'ying.
Bu — kelajakda faylni kutubxona sifatida ishlatish imkonini beradi. Va bu tekin.
2.4. main() funksiyasi — nega u kerak
Yuqoridagi misolni yanada yaxshilash mumkin:
def salom(ism):
return f"Salom, {ism}!"
def main():
ism = input("Ismingiz: ")
print(salom(ism))
if __name__ == "__main__":
main()Nega asosiy kodni main() ichiga o'rash kerak?
- Global o'zgaruvchilar paydo bo'lmaydi.
main()ichidagiism— mahalliy. Bu — 7-qismdagi qamrov mavzusi - Testlash oson —
main()ni testdan chaqirish mumkin (17-qism) - O'qish oson — dastur nimadan boshlanishi aniq
- Tez qaytish mumkin —
returnbilan istalgan joyda tugatish
Bu — Python jamoasidagi standart shakl. Ochiq kodli har qanday loyihada uni ko'rasiz.
2.5. __pycache__ — bu nima va nima qilish kerak
Faylni import qilgach papkangizda yangi narsa paydo bo'ladi:
loyiha/
├── main.py
├── salomlash.py
└── __pycache__/
└── salomlash.cpython-312.pyc1.4-darsdan eslang: Python kodni bytecode'ga o'giradi. .pyc fayli — saqlangan bytecode.
Nega? Tezlik uchun. Keyingi safar import qilganda Python qayta kompilyatsiya qilmaydi — tayyor bytecode'ni oladi.
Muhim faktlar:
.pycfaqat import qilingan modullar uchun yaratiladi.main.pyuchun yaratilmaydi- Nomdagi
cpython-312— qaysi Python versiyasiga tegishli ekanini bildiradi - Manba fayl o'zgarsa, Python buni sezadi va bytecode'ni yangilaydi
- Bu faylni tahrirlash mumkin emas — u ikkilik format
Nima qilish kerak?
Hech narsa. Faqat Git'ga qo'shmang:
# .gitignore
__pycache__/
*.pycYaratilishini o'chirish ham mumkin (odatda kerak emas):
python3 -B main.py # bu safar
export PYTHONDONTWRITEBYTECODE=1 # doimiy2.6. Ishga tushirishning barcha usullari
python3 main.py # oddiy
py main.py # Windows
python3 -m mening_paketim # modul sifatida (19-qism)
python3 -i main.py # bajarib, REPL'da qolish
python3 -B main.py # .pyc yaratmasdan
python3 -u main.py # buferlashsiz (1.8-dars)
python3 -O main.py # optimallashtirilgan (assert o'chadi)
python3 -c "print('salom')" # bitta buyruq-u — muhim bayroq. 1.8-darsda buferlash haqida gapirgandik. Server va Docker'da loglar ko'rinmay qolishi mumkin. -u buni hal qiladi.
Shebang (Unix'da)
Faylning birinchi qatoriga:
#!/usr/bin/env python3Keyin faylni bajariladigan qilib belgilang:
chmod +x main.py
./main.py # endi python3 yozish shart emas#! — "shebang". Operatsion tizim uni o'qib, faylni qaysi dastur bilan ochishni biladi.
/usr/bin/env python3 — "PATH dan python3 ni top" degani. To'g'ridan-to'g'ri /usr/bin/python3 yozishdan yaxshiroq, chunki u virtual muhitni ham hurmat qiladi (2.3-dars).
Windows'da shebang ishlamaydi (lekin
pyishga tushirgichi uni o'qiy oladi). Zarar qilmaydi — qo'shib qo'yavering.
2.7. Dasturga ma'lumot berish: sys.argv
Dasturga tashqaridan ma'lumot berishning ikki asosiy usuli bor.
1. input() — dastur ishlayotganda so'raydi
ism = input("Ismingiz: ")Qulay, lekin avtomatlashtirishga yaramaydi.
2. Buyruq satri argumentlari — ishga tushirishda beriladi
import sys
print(sys.argv)python3 main.py salom dunyo 42['main.py', 'salom', 'dunyo', '42']Muhim jihatlar:
sys.argv[0]— doim fayl nomi. Argumentlar[1]dan boshlanadi- Hamma element — satr.
42ham'42', son emas - 1.8-darsdagi 5-bosqichni eslang: OT jarayonga argumentlarni shunday uzatadi
Amaliy misol:
import sys
if len(sys.argv) < 2:
print("Foydalanish: python3 salom.py <ism>")
sys.exit(1)
ism = sys.argv[1]
print(f"Salom, {ism}!")python3 salom.py AliSalom, Ali!python3 salom.pyFoydalanish: python3 salom.py <ism>Jiddiy dasturlarda
argparseishlatiladi — u bayroqlar, yordam matni va turlarni o'zi boshqaradi. 15-qismda o'rganamiz.
2.8. Chiqish kodi — dastur qanday tugadi
Har bir dastur tugaganda operatsion tizimga son qaytaradi:
| Kod | Ma'nosi |
|---|---|
0 |
Muvaffaqiyat |
1 |
Umumiy xato |
2 |
Noto'g'ri foydalanish |
| boshqa | Dasturga xos |
Python buni avtomatik qiladi:
- Dastur normal tugadi →
0 - Ushlanmagan xato →
1
Qo'lda belgilash:
import sys
if xato_bor:
sys.exit(1) # xato bilan tugatish
sys.exit(0) # yoki oddiy tugashTekshirish:
python3 main.py
echo $? # Unix0python main.py
echo %ERRORLEVEL% # Windows cmdNega bu muhim?
Chiqish kodi — skriptlar va CI tizimlari uchun signal:
python3 test.py && python3 deploy.py&& — "birinchisi muvaffaqiyatli tugasa, ikkinchisini bajar". Agar test.py 1 qaytarsa, deploy.py ishga tushmaydi.
Bu — 28-qismdagi CI/CD ning asosi.
2.9. Kodlash va o'zbekcha matn
Python 3 sukut bo'yicha UTF-8 kutadi. O'zbekcha harflar (o', g', sh, ch) muammosiz ishlaydi:
print("Salom, o'zbek dasturchisi!")
ism = "G'ulomjon"
print(f"Xush kelibsiz, {ism}!")Muammo faqat ikki holatda chiqadi:
1. Fayl UTF-8 da saqlanmagan. Muharrirda tekshiring — VS Code holat qatorida UTF-8 yozilgan bo'lishi kerak.
2. Terminal UTF-8 ni qo'llab-quvvatlamaydi (eski Windows cmd):
UnicodeEncodeError: 'charmap' codec can't encode characterYechim:
chcp 65001 # cmd'da UTF-8 rejimga o'tishYoki Windows Terminal / Git Bash ishlating.
Eski kodda ba'zan quyidagi qatorni ko'rasiz:
# -*- coding: utf-8 -*-Bu — Python 2 davridan qolgan. Python 3 da kerak emas. Ko'rsangiz — eskirgan kod belgisi (1.7-dars).
3. Tez ma'lumotnoma
Fayl nomi
✅ main.py, hisob_kitob.py, dars_01.py
❌ Main.py, hisob-kitob.py, 01_dars.py, random.pyStandart tuzilma
"""Docstring."""
import sys # standart kutubxona
import requests # tashqi
SOLIQ = 0.12 # doimiylar
def yordamchi(): # funksiyalar
...
def main(): # asosiy mantiq
...
if __name__ == "__main__": # kirish nuqtasi
main()Ishga tushirish
python3 main.py oddiy
python3 -i main.py REPL'da qolish
python3 -u main.py buferlashsiz
python3 -B main.py .pyc yaratmasdan
./main.py shebang bilan (chmod +x kerak)Argumentlar va chiqish
import sys
sys.argv # ['main.py', 'arg1', 'arg2'] — hammasi SATR
sys.exit(0) # muvaffaqiyat
sys.exit(1) # xato4. Batafsil misollar
Misol 1 — Birinchi to'liq dastur
salomlashuv.py:
"""Foydalanuvchi bilan salomlashadigan oddiy dastur."""
def salomlash(ism: str) -> str:
"""Ism bo'yicha salomlashish matnini qaytaradi."""
return f"Salom, {ism}! Wisar Python kursiga xush kelibsiz."
def main() -> None:
ism = input("Ismingiz: ")
if not ism.strip():
print("Ism kiritilmadi.")
return
print(salomlash(ism.strip()))
if __name__ == "__main__":
main()python3 salomlashuv.pyIsmingiz: Sarvar
Salom, Sarvar! Wisar Python kursiga xush kelibsiz.Kodda nima bor:
| Element | Nima |
|---|---|
"""...""" (birinchi qator) |
Modul docstringi |
ism: str va -> str |
Tur ishoralari (13-qism) |
.strip() |
Boshi va oxiridagi bo'sh joyni olib tashlaydi |
if not ism.strip() |
Bo'sh kiritishni tekshirish |
return (qiymatsiz) |
Funksiyadan erta chiqish |
main() va __main__ |
Standart shakl |
Nima ko'rsatdi: 2.2, 2.3, 2.4-bo'limlar. Bu — professional Python faylining minimal shakli.
Misol 2 — __name__ ni o'z ko'zingiz bilan ko'rish
modul.py:
print(f"modul.py ichida __name__ = {__name__!r}")
def salom():
return "Salom moduldan!"
if __name__ == "__main__":
print("modul.py TO'G'RIDAN-TO'G'RI ishga tushirildi")
print(salom())asosiy.py:
print(f"asosiy.py ichida __name__ = {__name__!r}")
import modul
print(modul.salom())To'g'ridan-to'g'ri ishga tushirish:
python3 modul.pymodul.py ichida __name__ = '__main__'
modul.py TO'G'RIDAN-TO'G'RI ishga tushirildi
Salom moduldan!Import qilish:
python3 asosiy.pyasosiy.py ichida __name__ = '__main__'
modul.py ichida __name__ = 'modul'
Salom moduldan!E'tibor bering:
asosiy.py— u ishga tushirilgan, shuning uchun'__main__'modul.py— u import qilingan, shuning uchun'modul'modul.pydagiifbloki ishlamadi — aynan biz xohlagandek
{__name__!r} — !r tirnoqlar bilan ko'rsatadi (repr). 4-qismda batafsil.
Nima ko'rsatdi: 2.3-bo'lim. Bu tajriba __name__ ni bir marta va butunlay tushuntiradi.
Misol 3 — Argumentlar bilan ishlaydigan dastur
kalkulyator.py:
"""Buyruq satridan ikki son olib, ular ustida amal bajaradi.
Foydalanish:
python3 kalkulyator.py <son1> <amal> <son2>
Misol:
python3 kalkulyator.py 10 + 5
"""
import sys
def hisobla(a: float, amal: str, b: float) -> float:
if amal == "+":
return a + b
if amal == "-":
return a - b
if amal == "*":
return a * b
if amal == "/":
if b == 0:
print("Xato: nolga bo'lish mumkin emas")
sys.exit(1)
return a / b
print(f"Xato: noma'lum amal {amal!r}")
sys.exit(1)
def main() -> None:
if len(sys.argv) != 4:
print(__doc__)
sys.exit(2)
a = float(sys.argv[1])
amal = sys.argv[2]
b = float(sys.argv[3])
print(f"{a} {amal} {b} = {hisobla(a, amal, b)}")
if __name__ == "__main__":
main()python3 kalkulyator.py 10 + 510.0 + 5.0 = 15.0python3 kalkulyator.py 10 / 0Xato: nolga bo'lish mumkin emasecho $?1python3 kalkulyator.py 10Buyruq satridan ikki son olib, ular ustida amal bajaradi.
...echo $?2E'tibor bering:
float(sys.argv[1])— argument satr, uni songa aylantirish kerak (2.7-bo'lim)__doc__— modul docstringi. Yordam matni sifatida ishlatilyapti- Turli xato uchun turli chiqish kodi (2.8-bo'lim)
*ni terminalda ishlatganda tirnoqqa oling:"*"— aks holda qobiq uni fayl nomlariga almashtiradi
Nima ko'rsatdi: 2.7 va 2.8-bo'limlar. Bu — haqiqiy buyruq satri vositasining tuzilishi.
Misol 4 — __pycache__ ni kuzatish
mkdir sinov && cd sinovyordamchi.py:
def qosh(a, b):
return a + bmain.py:
from yordamchi import qosh
print(qosh(2, 3))lsmain.py yordamchi.pypython3 main.py5ls__pycache__ main.py yordamchi.pyls __pycache__yordamchi.cpython-312.pycSavol: nega main.cpython-312.pyc yo'q?
Chunki main.py import qilinmadi — u to'g'ridan-to'g'ri ishga tushirildi. Python faqat import qilingan modullar uchun bytecode saqlaydi (2.5-bo'lim).
Tekshirish:
rm -rf __pycache__
python3 -B main.py # -B — bytecode yozmasdan
lsmain.py yordamchi.pyPapka yaratilmadi.
Nima ko'rsatdi: 2.5 va 2.6-bo'limlar hamda 1.4-darsdagi bytecode mavzusi.
5. To'g'ri va noto'g'ri tushunishlar
| Noto'g'ri fikr | To'g'risi |
|---|---|
| "Fayl nomi ahamiyatsiz" | U modul nomi. random.py deb nomlash standart kutubxonani buzadi |
"if __name__ — keraksiz marosim" |
U import va ishga tushirishni ajratadi. Kelajakdagi o'zingiz uchun |
"main() funksiyasi ortiqcha" |
U global o'zgaruvchilarni oldini oladi va testlashni osonlashtiradi |
"__pycache__ — axlat, o'chirish kerak" |
U tezlashtiradi. Faqat Git'ga qo'shmang |
"sys.argv[0] — birinchi argument" |
Yo'q, u fayl nomi. Argumentlar [1] dan |
| "Argumentlar avtomatik son bo'ladi" | Hammasi satr. int() yoki float() kerak |
| "Chiqish kodi ahamiyatsiz" | CI, skriptlar va && unga tayanadi |
"# -*- coding: utf-8 -*- kerak" |
Python 3 da yo'q. Bu — Python 2 qoldig'i |
6. Keng tarqalgan xatolar va yechimlari
1. ModuleNotFoundError: No module named 'X'
Sabablar:
- Kutubxona o'rnatilmagan →
python3 -m pip install X - Noto'g'ri interpretator → 2.6-dars
- Fayl nomi noto'g'ri yozilgan
2. AttributeError: module 'random' has no attribute 'randint'
Sabab: sizning faylingiz nomi random.py (2.1-bo'lim).
Yechim: faylni qayta nomlang va __pycache__ ni o'chiring:
mv random.py mening_random.py
rm -rf __pycache__3. Import qilganda kutilmagan chiqish
Sabab: if __name__ == "__main__": ishlatilmagan (2.3-bo'lim).
Yechim: ishga tushirish kodini shu blok ichiga oling.
4. IndexError: list index out of range — sys.argv bilan
Sabab: argument berilmagan, lekin sys.argv[1] o'qilyapti.
Yechim: avval uzunlikni tekshiring:
if len(sys.argv) < 2:
print("Foydalanish: ...")
sys.exit(2)5. TypeError: can only concatenate str (not "int") to str
Sabab: sys.argv elementlari satr.
son = sys.argv[1] # '42' — satr!
natija = son + 10 # XATO
natija = int(son) + 10 # TO'G'RI6. Windows'da o'zbekcha harflar buzilyapti
Sabab: cmd UTF-8 rejimida emas (2.9-bo'lim).
Yechim: chcp 65001, yoki Windows Terminal / Git Bash ishlating.
7. Permission denied: ./main.py
Sabab: fayl bajariladigan deb belgilanmagan.
Yechim: chmod +x main.py. Shebang qatori ham bo'lishi kerak (2.6-bo'lim).
8. Kod o'zgardi, lekin eski natija chiqyapti
Sabablar:
- Fayl saqlanmagan (2.6-dars — Auto Save)
- Boshqa papkadagi bir xil nomli faylni ishga tushiryapsiz →
pwdbilan tekshiring
7. Integratsiya — bu bilim qayerda kerak bo'ladi
- 2.9-dars: bu dasturlarda xato chiqqanda uni o'qish
- 3-qism:
input(),print(), turlarni o'zgartirish — batafsil - 7-qism: funksiyalar,
main()ning to'liq ma'nosi, qamrov - 19-qism: paketlar,
python3 -m,__init__.py - 15-qism:
argparse— argumentlar bilan professional ishlash - 17-qism:
main()ni testlash - 28-qism: chiqish kodlari CI/CD da
8. Eng yaxshi amaliyotlar
Har doim
if __name__ == "__main__":yozing. Bu — bir qator, lekin kelajakda ko'p muammoni oldini oladi.Asosiy mantiqni
main()ichiga oling. Global o'zgaruvchilar — kelajakdagi bosh og'rig'i.Fayl nomlarini ehtiyot bo'lib tanlang. Standart kutubxona nomlarini band qilmang.
__pycache__ni.gitignorega qo'shing. Har doim, birinchi kundan.Argumentlarni doim tekshiring.
sys.argv[1]ni ko'r-ko'rona o'qish —IndexErroruchun taklifnoma.Xato bo'lganda
sys.exit(1)qiling. Skriptlar va CI shuni kutadi.Modul docstringi yozing. Uch oydan keyin o'zingizga rahmat aytasiz.
9. Amaliy topshiriq
Vazifa 1: Birinchi dastur
1-misoldagi salomlashuv.py ni yozing va ishga tushiring. Keyin kengaytiring:
- Yoshni ham so'rasin
- Yosh 18 dan kichik bo'lsa boshqa xabar chiqarsin
Vazifa 2: __name__ tajribasi
2-misoldagi ikki faylni yarating va ikkala usulda ishga tushiring. Savollar:
python3 modul.pyda__name__nima edi?python3 asosiy.pydamodul.pyning__name__i nima edi?- Nega
ifbloki ikkinchi holatda ishlamadi?
Vazifa 3: Argumentlar
sonlar.py yozing — buyruq satridan istalgancha son olib, quyidagilarni chiqarsin:
python3 sonlar.py 5 3 9 1 7Sonlar: 5.0, 3.0, 9.0, 1.0, 7.0
Jami: 25.0
O'rtacha: 5.0
Eng katta: 9.0
Eng kichik: 1.0Agar son berilmagan bo'lsa, foydalanish yo'riqnomasini chiqarib sys.exit(2) qilsin.
Yechim
"""Buyruq satridan sonlar olib, statistikasini chiqaradi.
Foydalanish: python3 sonlar.py <son1> <son2> ...
"""
import sys
def main() -> None:
if len(sys.argv) < 2:
print(__doc__)
sys.exit(2)
sonlar = [float(x) for x in sys.argv[1:]]
print("Sonlar:", ", ".join(str(s) for s in sonlar))
print("Jami: ", sum(sonlar))
print("O'rtacha:", sum(sonlar) / len(sonlar))
print("Eng katta:", max(sonlar))
print("Eng kichik:", min(sonlar))
if __name__ == "__main__":
main()sys.argv[1:] — birinchisidan tashqari hammasi (fayl nomini tashlab). Bu — kesim (slice), 4 va 6-qismlarda batafsil.
Vazifa 4: Chiqish kodini tekshirish
3-misoldagi kalkulyator.py ni yozing va har bir holatda chiqish kodini tekshiring:
python3 kalkulyator.py 10 + 5 ; echo $?
python3 kalkulyator.py 10 / 0 ; echo $?
python3 kalkulyator.py 10 ; echo $?Uch xil kod chiqdimi?
Vazifa 5: __pycache__ tajribasi
4-misoldagi tajribani takrorlang. Savol: main.py uchun nega .pyc yaratilmadi?
Vazifa 6: Nom tuzog'i
Ataylab xato yarating:
random.pynomli fayl yarating, ichigaprint("Bu mening faylim")yozing- Shu papkada
sinov.pyyarating:pythonimport random print(random.randint(1, 10)) - Ishga tushiring. Nima bo'ldi?
- Tuzating
Javob
Bu mening faylim
AttributeError: module 'random' has no attribute 'randint'Python joriy papkani birinchi qidiradi va sizning random.py ni topdi.
Tuzatish: faylni qayta nomlang va __pycache__ ni o'chiring (eski bytecode qolib ketishi mumkin).
Nimani mustahkamlaydi: 2.1, 2.3, 2.4, 2.5, 2.7, 2.8-bo'limlar.
Xulosa
Bu darsda birinchi haqiqiy Python dasturini yozdik va uni professional shaklga keltirdik.
Eng muhim uch fikr:
if __name__ == "__main__":+main()— standart shakl. Bu ikki qator faylni ham dastur, ham kutubxona qiladi. Har doim yozing.Fayl nomi — modul nomi.
random.pyyokijson.pydeb nomlash standart kutubxonani soya qiladi va tushunarsiz xatolarga olib keladi.sys.argvelementlari — satr, chiqish kodi — signal. Argumentni songa aylantiring, xato bo'lsasys.exit(1)qiling. Bu — dasturingizni boshqa vositalar bilan ishlatish imkonini beradi.
Keyingi darsda — 2-qismning yakuni — xato xabarlarini o'qishni o'rganamiz. Bu, ehtimol, butun kursdagi eng amaliy ko'nikma: chunki dasturchi vaqtining katta qismi xato tuzatishga ketadi.
Izohlar (0)
Izoh yozish uchun kiring.
- Hozircha izoh yo'q. Birinchi bo'ling!