{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "Cj3g7_Xjv0cQ"
   },
   "source": [
    "# Lab 01 - Bài tập"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "uHya_O8Nv9Bg"
   },
   "source": [
    "## PYTHON\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Phúc Lâm_TH01\n",
    "Thực hành làm quen với ngôn ngữ python\n",
    "tìm hiểu về các kiểu dữ liệu, list, for, if, while, dictionary,..."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "1. Viết chương trình nhập vào số nguyên n (n>0). In ra các số nguyên tố từ 1..n\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {
    "id": "AnQZ06Hxxwlo"
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Nhập vào số nguyên n (n > 0):  20\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "2\n",
      "3\n",
      "5\n",
      "7\n",
      "11\n",
      "13\n",
      "17\n",
      "19\n"
     ]
    }
   ],
   "source": [
    "n = int(input(\"Nhập vào số nguyên n (n > 0): \"))\n",
    "if n == 1:\n",
    "    print(n, \"Không phải là số nguyên tố\")\n",
    "if n <= 0:\n",
    "    print(\"Lỗi dữ liệu đầu vào\")\n",
    "for i in range(2, n + 1):\n",
    "    is_prime = True\n",
    "    for j in range(2, int(i**0.5) + 1):\n",
    "        if i % j == 0:\n",
    "            is_prime = False\n",
    "            break\n",
    "    if is_prime:\n",
    "        print(i)\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "XpmGHRLRxx34"
   },
   "source": [
    "# 2. Viết chương trình nhập vào số nguyên n có 3 chữ số. Tính tổng các chữ số của n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {
    "id": "AXOFJ9Iwvtvh"
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Nhập vào số nguyên n có 3 chữ số (n > 0):  789\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "OK || n = 789\n",
      "7\n",
      "8\n",
      "9\n",
      "SUM =  24\n"
     ]
    }
   ],
   "source": [
    "\n",
    "n = -1\n",
    "n = int(input(\"Nhập vào số nguyên n có 3 chữ số (n > 0): \"))\n",
    "while n < 0 or n > 999:\n",
    "    print(\"Dữ liệu không hợp lệ\")\n",
    "    n = int(input(\"Nhập vào số nguyên n có 3 chữ số (n > 0): \"))\n",
    "print(\"OK || n =\",n)\n",
    "a = n//100\n",
    "print(a)\n",
    "\n",
    "b = n//10%10\n",
    "print(b)\n",
    "\n",
    "c = n%10\n",
    "print(c)\n",
    "\n",
    "print(\"SUM =\",a+b+c)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "oba6gvmwyFrZ"
   },
   "source": [
    "3. Viết chương trình nhập vào một dãy các số nguyên được cách nhau bởi khoảng trắng (VD: 32 8 4 6 9...) lưu vào python ở dạng mảng. Thực hiện\n",
    "\n",
    "- Xuất mảng\n",
    "- Tính tổng các phần tử của mảng\n",
    "- Tìm số lớn nhất\n",
    "- Tìm số bé nhất\n",
    "- Sắp xếp mảng theo thứ tự giảm dần\n",
    "- In ra các số chẵn trong mảng"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 62,
   "metadata": {
    "id": "9XBwANmGyFyY"
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      " nhập vào một dãy các số nguyên được cách nhau bởi khoảng trắng (VD: 32 8 4 6 9...)\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      " 1 2 3 4 5\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Xuất mảng: [1, 2, 3, 4, 5]\n",
      "Tính tổng các phần tử của mảng: 15\n",
      "Tìm số lớn nhất: 5\n",
      "Tìm số bé nhất: 1\n",
      "Mảng gốc: [1, 2, 3, 4, 5]\n",
      "Sau khi sắp xếp mảng giảm dần: [5, 4, 3, 2, 1]\n",
      "In ra các số chẳn trong mảng [4, 2]\n"
     ]
    }
   ],
   "source": [
    "print(' nhập vào một dãy các số nguyên được cách nhau bởi khoảng trắng (VD: 32 8 4 6 9...)')\n",
    "input_string = input()\n",
    "\n",
    "ls = list(map(int, input_string.split(' ')))\n",
    "print('Xuất mảng:', ls)\n",
    "\n",
    "sum = 0\n",
    "for i in ls:\n",
    "    sum+=i\n",
    "print('Tính tổng các phần tử của mảng:',sum)\n",
    "\n",
    "print('Tìm số lớn nhất:',max(ls))\n",
    "\n",
    "print('Tìm số bé nhất:',min(ls))\n",
    "\n",
    "print ('Mảng gốc:',ls)\n",
    "ls.sort(reverse=True)\n",
    "print('Sau khi sắp xếp mảng giảm dần:', ls)\n",
    "\n",
    "ls1 = []\n",
    "for i in ls:\n",
    "    if i % 2==0:\n",
    "        ls1.append(i)\n",
    "print('In ra các số chẳn trong mảng',ls1)       "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "hgGOt_Cxyulx"
   },
   "source": [
    "4. Viết chương trình yêu cầu người dùng nhập họ tên. Hiển thị tên người dùng sau khi đã chuẩn hóa. Biết rằng tên đã chuẩn hóa là:\n",
    "- Ký tự đầu viết hoa\n",
    "- Không có khoảng trắng thừa\n",
    "- Không có ký tự đặc biệt"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 33,
   "metadata": {
    "id": "duR4BF8Dyu_w"
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Nhập họ tên của bạn:  Hồ   phúC LâM  \n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Tên đã chuẩn hóa: Hồ Phúc Lâm\n"
     ]
    }
   ],
   "source": [
    "def chuan_hoa_ten(ten):\n",
    "    # Loại bỏ khoảng trắng thừa và tách thành các từ\n",
    "    tu = ten.split()\n",
    "    \n",
    "    # Viết hoa ký tự đầu mỗi từ\n",
    "    tu_chuan_hoa = [t.capitalize() for t in tu]\n",
    "    \n",
    "    # Ghép lại thành chuỗi duy nhất\n",
    "    ten_chuan_hoa = \" \".join(tu_chuan_hoa)\n",
    "    \n",
    "    return ten_chuan_hoa\n",
    "\n",
    "# Yêu cầu người dùng nhập họ tên\n",
    "ten_nguoi_dung = input(\"Nhập họ tên của bạn: \")\n",
    "\n",
    "# Chuẩn hóa tên\n",
    "ten_chuan_hoa = chuan_hoa_ten(ten_nguoi_dung)\n",
    "\n",
    "# Hiển thị tên đã chuẩn hóa\n",
    "print(\"Tên đã chuẩn hóa:\", ten_chuan_hoa)\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "W5KucasA0NSA"
   },
   "source": [
    "5. Viết chương trình nhập vào một số nguyên dương (n>0). Cho biết n có phải là số đối xứng hay không? Biết số đối xứng là số viết xuôi hay viết ngược đều như nhau"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 72,
   "metadata": {
    "id": "FTH5V3je0YPg"
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Nhập vào một số nguyên dương (n>0) 12321\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "12321\n",
      "Chuỗi đối xứng\n"
     ]
    }
   ],
   "source": [
    "n = input(\"Nhập vào một số nguyên dương (n>0)\")\n",
    "print(n)\n",
    "if n == n[::-1]:\n",
    "    print(\"Chuỗi đối xứng\")\n",
    "else:\n",
    "    print(\"Chuỗi bất đối xứng\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "6. Với số nguyên n nhất định, hãy viết chương trình hiển thị dictionary chứa các cặp (i, i*i) ; biết i có giá trị từ 1..n\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Nhập vào một số nguyên: 5\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "{1: 1, 2: 4, 3: 9, 4: 16, 5: 25}\n"
     ]
    }
   ],
   "source": [
    "n = int(input(\"Nhập vào một số nguyên:\"))\n",
    "result = {i: i*i for i in range(1, n+1)}\n",
    "print(result)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "7. Viết chương trình tìm tất cả các số chia hết cho 7 nhưng không phải bội số của 5, nằm trong đoạn 2000 và 3200 (tính cả 2000 và 3200). Các số thu được sẽ được in thành chuỗi trên một dòng, cách nhau bằng dấu phẩy"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "2002,2009,2016,2023,2037,2044,2051,2058,2072,2079,2086,2093,2107,2114,2121,2128,2142,2149,2156,2163,2177,2184,2191,2198,2212,2219,2226,2233,2247,2254,2261,2268,2282,2289,2296,2303,2317,2324,2331,2338,2352,2359,2366,2373,2387,2394,2401,2408,2422,2429,2436,2443,2457,2464,2471,2478,2492,2499,2506,2513,2527,2534,2541,2548,2562,2569,2576,2583,2597,2604,2611,2618,2632,2639,2646,2653,2667,2674,2681,2688,2702,2709,2716,2723,2737,2744,2751,2758,2772,2779,2786,2793,2807,2814,2821,2828,2842,2849,2856,2863,2877,2884,2891,2898,2912,2919,2926,2933,2947,2954,2961,2968,2982,2989,2996,3003,3017,3024,3031,3038,3052,3059,3066,3073,3087,3094,3101,3108,3122,3129,3136,3143,3157,3164,3171,3178,3192,3199\n"
     ]
    }
   ],
   "source": [
    "result = []\n",
    "for i in range (2000, 3201):\n",
    "    if i % 7 == 0 and i % 5 !=0:\n",
    "        result.append(str(i))\n",
    "print(\",\".join(result))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "8. Viết chương trình chấp nhận một chuỗi số, phân tách bằng dấu phẩy từ giao diện điều khiển, tạo ra một List và một tuple chứa mọi số.\n",
    "\n",
    "    Ví dụ:\n",
    "\n",
    "    ```\n",
    "    Đầu vào được cung cấp là '34,67,55,33,12,98' thì đầu ra là:\n",
    "\n",
    "    [34, 67, 55, 33, 12, 98]\n",
    "    (34, 67, 55, 33, 12, 98)\n",
    "    ```\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Nhập vào một dãy các số nguyên được cách nhau bởi dấu phẩy (VD: 34,67,55,33,12,98)\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      " 34,67,55,33,12,98\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Xuất List: [34, 67, 55, 33, 12, 98]\n",
      "Xuất Tuple: (34, 67, 55, 33, 12, 98)\n"
     ]
    }
   ],
   "source": [
    "print('Nhập vào một dãy các số nguyên được cách nhau bởi dấu phẩy (VD: 34,67,55,33,12,98)')\n",
    "input_string = input()\n",
    "\n",
    "ls = list(map(int, input_string.split(',')))\n",
    "print('Xuất List:', ls)\n",
    "\n",
    "tp = tuple(ls)\n",
    "print('Xuất Tuple:', tp)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "9. Viết hàm nhận vào một danh sách các số nguyên. Hãy viết hàm trả về một danh sách gồm các số không trùng nhau trong danh sách ban đầu"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[1, 2, 3, 4, 5, 6]\n"
     ]
    }
   ],
   "source": [
    "def inputNumber(lsNumbers):\n",
    "    return list(set(lsNumbers))\n",
    "#chay goi ham\n",
    "listNumber = [1, 2, 2, 3, 3, 2, 4, 5, 6, 6]\n",
    "result = inputNumber(listNumber)\n",
    "print(result)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "10. Viết hàm có tham số đầu vào là một list L có các phần tử là chuỗi. Hãy tạo ra một dictionary D mã hóa, với mỗi một phần tử trong L được mã hóa thành một con số (theo thứ tự từ 0 tăng dần lên 1 đơn vị). Sau đó trả về list đã được mã hóa\n",
    "\n",
    "    Ví dụ:\n",
    "\n",
    "    ```\n",
    "    Cho L = [\"đen\",\"vàng\",\"xanh\",\"vàng\",\"xanh\",\"đỏ\",\"hồng\"]\n",
    "\n",
    "    Xây dựng dictionary mã hóa:\n",
    "    D = {'đen':0,'vàng':1,'xanh':2,'đỏ':3,'hồng':4}\n",
    "\n",
    "    Trả về List mã hóa:\n",
    "    L_mahoa = [0, 1, 2, 1, 2, 3, 4]\n",
    "    ```"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "L_mahoa = [0, 1, 2, 1, 2, 3, 4]\n"
     ]
    }
   ],
   "source": [
    "def dictionaryInput(L):\n",
    "    D = {}\n",
    "    ls = []\n",
    "    index = 0\n",
    "    for item in L:\n",
    "        if item not in D:\n",
    "            D[item] = index\n",
    "            index += 1\n",
    "        ls.append(D[item])\n",
    "    return D, ls\n",
    "\n",
    "#vidu\n",
    "L = [\"đen\", \"vàng\", \"xanh\", \"vàng\", \"xanh\", \"đỏ\", \"hồng\"]\n",
    "D = {'đen':0, 'vàng':1, 'xanh':2, 'đỏ':3, 'hồng':4}\n",
    "L_mahoa = []\n",
    "D, L_mahoa = dictionaryInput(L)\n",
    "\n",
    "print(\"L_mahoa =\",L_mahoa)\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "---"
   ]
  }
 ],
 "metadata": {
  "colab": {
   "authorship_tag": "ABX9TyOelhBBO7DINQ7b3uUiVhbi",
   "provenance": []
  },
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.8.19"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
