Topshiriqlar 2 (set va dict)

Quyidagi mashqlar source/python3/set-dict.ipynb mavzulari asosida tuzilgan.

A. set (to‘plam) bo‘yicha mashqlar

  1. nums = [1, 2, 2, 3, 3, 3, 10, 10, -1] ro‘yxatidan set yasang va:

    1. nechta noyob (takrorlanmaydigan) son borligini toping;

    2. noyob sonlarni tartiblangan ro‘yxat ko‘rinishida chiqaring.

  2. text = "assalomu alaykum" satridagi noyob harflar to‘plamini hosil qiling (bo‘sh joyni hisobga olmang).

  3. Foydalanuvchi kiritgan 2 ta ro‘yxat berilgan deb oling: a va b.

    1. Ikkalasida ham bor elementlar (kesishma)ni toping.

    2. Kamida bittasida bor elementlar (birlashma)ni toping.

    3. Faqat a da bor, b da yo‘q elementlar (farq)ni toping.

  4. Quyidagi ikki to‘plam berilgan:

    A = {1, 2, 3, 4, 5}
    B = {4, 5, 6, 7}
    
    1. A.union(B) va A | B natijalarini solishtiring.

    2. A.intersection(B) va A & B.

    3. A.difference(B) va A - B.

    4. A.symmetric_difference(B) va A ^ B.

  5. set ga element qo‘shish/o‘chirish:

    1. bo‘sh s = set() yarating va add() bilan 5 ta element qo‘shing.

    2. remove() va discard() farqini misol bilan ko‘rsating (yo‘q elementni o‘chirishga uring).

    3. pop() nima qaytaradi? Nega u doim bir xil elementni qaytarmasligi mumkin?

  6. set ichiga qaysi turlarni joylab bo‘lmasligini ko‘rsating:

    1. set ichiga list qo‘shishga urining;

    2. tuple qo‘shishga urining;

    3. natijani izohlang (hashlanuvchan/immutable tushunchasi).

  7. (Amaliy) 2 ta sinf ro‘yxati berilgan: classA, classB.

    1. Ikkala sinfga ham qatnashayotgan o‘quvchilarni toping.

    2. Faqat bitta sinfda bor o‘quvchilarni toping.

    3. Umumiy nechta noyob o‘quvchi bor?

B. dict (lug‘at) bo‘yicha mashqlar

  1. Quyidagi lug‘at berilgan:

    student = {'name': 'Ali', 'age': 20, 'group': 'A1'}
    
    1. keys(), values(), items() nima qaytarishini ko‘rsating.

    2. student['age'] ni 21 ga o‘zgartiring.

    3. yangi kalit qo‘shing: city.

  2. get() va indekslash farqi:

    1. mavjud bo‘lmagan kalitga student['phone'] bilan murojaat qiling.

    2. student.get('phone') va student.get('phone', 'noma’lum') ni solishtiring.

  3. del va pop():

  1. del student['group'] bilan kalitni o‘chiring.

  2. pop() bilan o‘chiring va qaytgan qiymatni alohida o‘zgaruvchiga saqlang.

  1. (Chastota) nums = [1, 2, 2, 3, 3, 3] ro‘yxatidagi har bir son necha marta uchraganini dict ko‘rinishida toping.

  2. (So‘zlar soni) text satrini so‘zlarga bo‘ling va har bir so‘z chastotasini toping.

    • Katta-kichik harfni bir xil hisoblash uchun .lower() qiling.

    • Ixtiyoriy: tinish belgilarini olib tashlang.

  3. (Eng ko‘p uchragan) 12-masaladagi chastota lug‘atidan eng ko‘p uchragan 3 ta so‘zni toping.

  4. (Guruhlash) Quyidagi ro‘yxat berilgan:

people = [
  ('Ali', 'Toshkent'),
  ('Vali', 'Samarqand'),
  ('Guli', 'Toshkent'),
  ('Soli', 'Buxoro'),
]

Shahar -> odamlar ro‘yxati ko‘rinishida lug‘at tuzing, masalan: {'Toshkent': ['Ali','Guli'], ...}. 15. (Kalit mavjudligini tekshirish) Lug‘atda kalit bor-yo‘qligini in bilan tekshirib, yo‘q bo‘lsa qo‘shing. 16. copy() vs oddiy tayinlash: a) a = {'x': 1}; b = a; c = a.copy() qilib ko‘ring. b) a['x']=2 qilganda b va c qanday o‘zgaradi? Izohlang.

C. Kichik loyiha (ixtiyoriy)

  1. Foydalanuvchi bir nechta mahsulot nomi va narxini kiritadi (masalan, 5 ta mahsulot).

  1. Mahsulot -> narx lug‘atini tuzing.

  2. Eng qimmat va eng arzon mahsulotni toping.

  3. Narxlar o‘rtachasini hisoblang.

  1. Bir nechta talabaning baholari ro‘yxati berilgan (masalan, {'Ali':[5,4,5], 'Vali':[3,4]}):

  1. Har bir talabaning o‘rtacha bahosini hisoblab yangi lug‘at yarating.

  2. Eng yuqori o‘rtachaga ega talabani toping.