{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 题目1\n",
    "\n",
    "请编写一个程序，从 1 到 1200（含 1200）中寻找所有满足除以 4 余 1，且除以 6 余 3 的数字。\n",
    "\n",
    "**要求**：将满足条件的数字存储在一个列表中，输出该列表，并输出列表内元素的个数。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "满足条件的数字列表： [9, 21, 33, 45, 57, 69, 81, 93, 105, 117, 129, 141, 153, 165, 177, 189, 201, 213, 225, 237, 249, 261, 273, 285, 297, 309, 321, 333, 345, 357, 369, 381, 393, 405, 417, 429, 441, 453, 465, 477, 489, 501, 513, 525, 537, 549, 561, 573, 585, 597, 609, 621, 633, 645, 657, 669, 681, 693, 705, 717, 729, 741, 753, 765, 777, 789, 801, 813, 825, 837, 849, 861, 873, 885, 897, 909, 921, 933, 945, 957, 969, 981, 993, 1005, 1017, 1029, 1041, 1053, 1065, 1077, 1089, 1101, 1113, 1125, 1137, 1149, 1161, 1173, 1185, 1197]\n",
      "列表内元素的个数： 100\n"
     ]
    }
   ],
   "source": [
    "# 使用列表推导式筛选满足条件的数字\n",
    "result = [i for i in range(1, 1201) if i % 4 == 1 and i % 6 == 3]\n",
    "\n",
    "print('满足条件的数字列表：', result)\n",
    "print('列表内元素的个数：', len(result))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 题目2\n",
    "\n",
    "居民生活用电执行阶梯电价计费规则：\n",
    "- 月用电量 200 度及以内的部分，按每度 0.52 元计费；\n",
    "- 201 度到 400 度的部分，按每度 0.57 元计费；\n",
    "- 401 度到 600 度的部分，按每度 0.82 元计费；\n",
    "- 超过 600 度的部分，按每度 0.92 元计费。\n",
    "\n",
    "**要求**：键盘输入当月用电量（`input('请输入当月用电量（度）：')`），当输入为正数值时执行计费逻辑，并输出应缴纳的电费总额；当输入为非数值或负数时，输出错误提示（`'输入错误，请重新输入'`）。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "应缴纳的电费总额为：104.00 元\n"
     ]
    }
   ],
   "source": [
    "x = input('请输入当月用电量（度）：')\n",
    "\n",
    "try:\n",
    "    kwh = float(x)\n",
    "    if kwh < 0:\n",
    "        print('输入错误，请重新输入')\n",
    "    else:\n",
    "        if kwh <= 200:\n",
    "            fee = kwh * 0.52\n",
    "        elif kwh <= 400:\n",
    "            fee = 200 * 0.52 + (kwh - 200) * 0.57\n",
    "        elif kwh <= 600:\n",
    "            fee = 200 * 0.52 + 200 * 0.57 + (kwh - 400) * 0.82\n",
    "        else:\n",
    "            fee = 200 * 0.52 + 200 * 0.57 + 200 * 0.82 + (kwh - 600) * 0.92\n",
    "        print(f'应缴纳的电费总额为：{fee:.2f} 元')\n",
    "except ValueError:\n",
    "    print('输入错误，请重新输入')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 题目3\n",
    "\n",
    "有个函数 FUN1，该函数的功能是：提取输入字符串中的所有数字字符，按其在原字符串中的出现顺序拼接成新的字符串，并将其转换为整数返回；若输入的字符串中不包含任何数字字符，返回整数 0。\n",
    "\n",
    "**要求**：编写并实现该函数功能，分别输出调用该函数 `FUN1('hello world!')` 和 `FUN1('python2024java2025')` 的结果。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "FUN1('hello world!') = 0\n",
      "FUN1('python2024java2025') = 20242025\n"
     ]
    }
   ],
   "source": [
    "def FUN1(s):\n",
    "    # 按原顺序拼接所有数字字符\n",
    "    digits = ''.join(c for c in s if c.isdigit())\n",
    "    # 若无数字字符则返回 0，否则转换为整数\n",
    "    return int(digits) if digits else 0\n",
    "\n",
    "print(\"FUN1('hello world!') =\", FUN1('hello world!'))\n",
    "print(\"FUN1('python2024java2025') =\", FUN1('python2024java2025'))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 题目4\n",
    "\n",
    "现有一个字典 `student_info = {\"202601\":(\"李华\",92,88,95), \"202602\":(\"王芳\",87,93,89), \"202603\":(\"张伟\",78,85,90), \"202604\":(\"刘敏\",90,79,86)}`，其中字典的键为学生学号，值为元组（姓名，语文成绩，数学成绩，英语成绩）。\n",
    "\n",
    "**要求**：编写一个程序将该字典信息写入 `student.txt` 的文本文件中，每行为一个学生的完整信息，**数据之间用短横线 `-` 连接，每行末尾需追加该学生的三科成绩总分，下个同学需换行**，最终文件内容效果如下所示：\n",
    "\n",
    "```\n",
    "202601-李华-92-88-95-275\n",
    "202602-王芳-87-93-89-269\n",
    "202603-张伟-78-85-90-253\n",
    "202604-刘敏-90-79-86-255\n",
    "```"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "202601-李华-92-88-95-275\n",
      "202602-王芳-87-93-89-269\n",
      "202603-张伟-78-85-90-253\n",
      "202604-刘敏-90-79-86-255\n",
      "\n"
     ]
    }
   ],
   "source": [
    "student_info = {\n",
    "    \"202601\": (\"李华\", 92, 88, 95),\n",
    "    \"202602\": (\"王芳\", 87, 93, 89),\n",
    "    \"202603\": (\"张伟\", 78, 85, 90),\n",
    "    \"202604\": (\"刘敏\", 90, 79, 86)\n",
    "}\n",
    "\n",
    "# 写入文件\n",
    "with open('student.txt', 'w', encoding='utf-8') as f:\n",
    "    for sid, info in student_info.items():\n",
    "        name, chinese, math, english = info\n",
    "        total = chinese + math + english\n",
    "        line = f'{sid}-{name}-{chinese}-{math}-{english}-{total}\\n'\n",
    "        f.write(line)\n",
    "\n",
    "# 读取并展示文件内容以便验证\n",
    "with open('student.txt', 'r', encoding='utf-8') as f:\n",
    "    print(f.read())"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 题目5\n",
    "\n",
    "班级用 200 元班费采购三类体育用品：跳绳（单价 8 元）、毽子（单价 3 元）、羽毛球拍（单价 25 元）。要求把 200 元班费正好全部花完，请问有哪些购买组合？\n",
    "\n",
    "**要求**：输出所有符合条件的购买组合结果（**最多使用两层循环**），组合结果中的数字通过 f 表达式填入下面这句话，`\"可以购买0个跳绳、0个毽子、8个羽毛球拍。\"`"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "可以购买0个跳绳、50个毽子、2个羽毛球拍。\n",
      "可以购买0个跳绳、25个毽子、5个羽毛球拍。\n",
      "可以购买0个跳绳、0个毽子、8个羽毛球拍。\n",
      "可以购买1个跳绳、64个毽子、0个羽毛球拍。\n",
      "可以购买1个跳绳、39个毽子、3个羽毛球拍。\n",
      "可以购买1个跳绳、14个毽子、6个羽毛球拍。\n",
      "可以购买2个跳绳、53个毽子、1个羽毛球拍。\n",
      "可以购买2个跳绳、28个毽子、4个羽毛球拍。\n",
      "可以购买2个跳绳、3个毽子、7个羽毛球拍。\n",
      "可以购买3个跳绳、42个毽子、2个羽毛球拍。\n",
      "可以购买3个跳绳、17个毽子、5个羽毛球拍。\n",
      "可以购买4个跳绳、56个毽子、0个羽毛球拍。\n",
      "可以购买4个跳绳、31个毽子、3个羽毛球拍。\n",
      "可以购买4个跳绳、6个毽子、6个羽毛球拍。\n",
      "可以购买5个跳绳、45个毽子、1个羽毛球拍。\n",
      "可以购买5个跳绳、20个毽子、4个羽毛球拍。\n",
      "可以购买6个跳绳、34个毽子、2个羽毛球拍。\n",
      "可以购买6个跳绳、9个毽子、5个羽毛球拍。\n",
      "可以购买7个跳绳、48个毽子、0个羽毛球拍。\n",
      "可以购买7个跳绳、23个毽子、3个羽毛球拍。\n",
      "可以购买8个跳绳、37个毽子、1个羽毛球拍。\n",
      "可以购买8个跳绳、12个毽子、4个羽毛球拍。\n",
      "可以购买9个跳绳、26个毽子、2个羽毛球拍。\n",
      "可以购买9个跳绳、1个毽子、5个羽毛球拍。\n",
      "可以购买10个跳绳、40个毽子、0个羽毛球拍。\n",
      "可以购买10个跳绳、15个毽子、3个羽毛球拍。\n",
      "可以购买11个跳绳、29个毽子、1个羽毛球拍。\n",
      "可以购买11个跳绳、4个毽子、4个羽毛球拍。\n",
      "可以购买12个跳绳、18个毽子、2个羽毛球拍。\n",
      "可以购买13个跳绳、32个毽子、0个羽毛球拍。\n",
      "可以购买13个跳绳、7个毽子、3个羽毛球拍。\n",
      "可以购买14个跳绳、21个毽子、1个羽毛球拍。\n",
      "可以购买15个跳绳、10个毽子、2个羽毛球拍。\n",
      "可以购买16个跳绳、24个毽子、0个羽毛球拍。\n",
      "可以购买17个跳绳、13个毽子、1个羽毛球拍。\n",
      "可以购买18个跳绳、2个毽子、2个羽毛球拍。\n",
      "可以购买19个跳绳、16个毽子、0个羽毛球拍。\n",
      "可以购买20个跳绳、5个毽子、1个羽毛球拍。\n",
      "可以购买22个跳绳、8个毽子、0个羽毛球拍。\n",
      "可以购买25个跳绳、0个毽子、0个羽毛球拍。\n"
     ]
    }
   ],
   "source": [
    "# 只使用两层循环：外层跳绳，内层羽毛球拍；毽子数量由方程推出\n",
    "# 8*a + 3*b + 25*c = 200\n",
    "for a in range(200 // 8 + 1):          # 跳绳数量\n",
    "    for c in range(200 // 25 + 1):     # 羽毛球拍数量\n",
    "        remain = 200 - 8 * a - 25 * c\n",
    "        if remain >= 0 and remain % 3 == 0:\n",
    "            b = remain // 3            # 毽子数量\n",
    "            print(f'可以购买{a}个跳绳、{b}个毽子、{c}个羽毛球拍。')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 题目6（\n",
    "\n",
    "有个递归函数 FUN2，当输入 n 为偶数时，函数输出 `1/2 + 1/4 + ... + 1/n` 的结果，当输入 n 为奇数时，函数输出 `1/1 + 1/3 + ... + 1/n` 的结果。\n",
    "\n",
    "**要求**：编写并实现该函数功能，**返回结果需要四舍五入，并保留两位小数**，分别输出用数字 **5** 和 **6** 调用该函数的结果。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "FUN2(5) = 1.53\n",
      "FUN2(6) = 0.92\n"
     ]
    }
   ],
   "source": [
    "def FUN2(n):\n",
    "    # 递归出口：n 为 1（奇数最小项）或 2（偶数最小项）\n",
    "    if n == 1 or n == 2:\n",
    "        return round(1 / n, 2)\n",
    "    # 递归调用，每次递减 2 保持奇偶性\n",
    "    return round(1 / n + FUN2(n - 2), 2)\n",
    "\n",
    "print('FUN2(5) =', FUN2(5))\n",
    "print('FUN2(6) =', FUN2(6))"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "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.13.9"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
