{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 2023年度計算機演習A・B\n",
    "\n",
    "# 第2回レポート課題の解説"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<span style=\"color:red\">Notebookのセルは、上のボタンでコピー・貼り付けができます。問題文を写す際に便利です。</span>\n",
    "\n",
    "<span style=\"color:red\">切り取りのボタンを使えば、不要なセルを削除することができます。</span>"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 演習1\n",
    "\n",
    "与えられたリスト\\[1, 3, 5, 7, 9\\]を元に、for文を使って新しいリスト\\[1, 9, 25, 49, 81\\]を作成してください。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[1, 3, 5, 7, 9]\n",
      "[1, 9, 25, 49, 81]\n"
     ]
    }
   ],
   "source": [
    "given_list = [1,3,5,7,9]\n",
    "print(given_list)\n",
    "new_list = []\n",
    "\n",
    "for a in given_list:\n",
    "    new_list.append(a**2)  #a^2を使いたくなるが、排他的論理和という別の計算になるので注意\n",
    "\n",
    "print(new_list)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### （別解）\n",
    "\n",
    "覚える必要はありませんが、参考までに次のような書き方（リスト内包表記）も可能です。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[1, 3, 5, 7, 9]\n",
      "[1, 9, 25, 49, 81]\n"
     ]
    }
   ],
   "source": [
    "given_list = [1,3,5,7,9]\n",
    "print(given_list)\n",
    "\n",
    "new_list = [a**2 for a in given_list]  #リスト内包表記（簡潔に記述できる）\n",
    "\n",
    "print(new_list)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 演習2\n",
    "\n",
    "for文とrange関数を使って、1から10までの整数の和を求めるコードを書いてください。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "1から10までの整数の和は 55\n"
     ]
    }
   ],
   "source": [
    "result = 0\n",
    "\n",
    "for i in range(1,11):  #range(10)にするなら、次の行のiをi+1に変える必要がある\n",
    "    result = result+i  #「result += i」でも可\n",
    "\n",
    "print(\"1から10までの整数の和は\",result)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 演習3\n",
    "\n",
    "任意の数値のリストが与えられたときに、for文を使ってリストの要素の平均を求めるコードを書いてください。余裕があればさらに、リストの要素の分散を求めるコードを追加してください。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[64, 41, 79, 56, 29, 98, 71, 37]\n",
      "リストの要素の平均は 59.375\n"
     ]
    }
   ],
   "source": [
    "given_list = [64,41,79,56,29,98,71,37]\n",
    "print(given_list)\n",
    "result = 0\n",
    "\n",
    "for a in given_list:\n",
    "    result = result+a\n",
    "\n",
    "result = result/len(given_list)  #for文の中に入れてはいけない（インデントしない）\n",
    "#「result /= len(given_list)」でも可\n",
    "\n",
    "print(\"リストの要素の平均は\",result)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "リストの要素の分散を求めるコードを追加すると、次のようになります。\n",
    "\n",
    "(1) $s^2=\\frac{1}{n}\\sum_{i=1}^{n}\\left(x_i-\\overline{x}\\right)^2$を利用する場合"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[64, 41, 79, 56, 29, 98, 71, 37]\n",
      "リストの要素の平均は 59.375\n",
      "リストの要素の分散は 475.734375\n"
     ]
    }
   ],
   "source": [
    "given_list = [64,41,79,56,29,98,71,37]\n",
    "print(given_list)\n",
    "\n",
    "result = 0\n",
    "for a in given_list:\n",
    "    result = result+a\n",
    "result = result/len(given_list)\n",
    "\n",
    "print(\"リストの要素の平均は\",result)\n",
    "\n",
    "result2 = 0\n",
    "for a in given_list:\n",
    "    result2 = result2+(a-result)**2\n",
    "result2 = result2/len(given_list)\n",
    "\n",
    "print(\"リストの要素の分散は\",result2)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "(2) $s^2=\\overline{x^2}-\\overline{x}^2$を利用する場合"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[64, 41, 79, 56, 29, 98, 71, 37]\n",
      "リストの要素の平均は 59.375\n",
      "リストの要素の分散は 475.734375\n"
     ]
    }
   ],
   "source": [
    "given_list = [64,41,79,56,29,98,71,37]\n",
    "print(given_list)\n",
    "\n",
    "result = 0\n",
    "result2 = 0\n",
    "for a in given_list:\n",
    "    result = result+a\n",
    "    result2 = result2+a**2\n",
    "result = result/len(given_list)\n",
    "result2 = result2/len(given_list)-result**2\n",
    "\n",
    "print(\"リストの要素の平均は\",result)\n",
    "print(\"リストの要素の分散は\",result2)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### （答えの検証）\n",
    "\n",
    "Pythonでは平均と分散を求める関数が標準では用意されていませんが、numpyというライブラリを利用するとそれぞれを求める関数が使えます（覚える必要はありません）。結果として、上で求めた平均と分散が正しいことが確認できます。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[64, 41, 79, 56, 29, 98, 71, 37]\n",
      "リストの要素の平均は 59.375\n",
      "リストの要素の分散は 475.734375\n"
     ]
    }
   ],
   "source": [
    "given_list = [64,41,79,56,29,98,71,37]\n",
    "print(given_list)\n",
    "\n",
    "import numpy\n",
    "\n",
    "print(\"リストの要素の平均は\",numpy.average(given_list))\n",
    "print(\"リストの要素の分散は\",numpy.var(given_list))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<span style=\"color:red\">レポート課題提出のためのファイルのダウンロードは、必ずファイルを保存してから行うようにしてください。ファイルの保存は一定時間ごとに自動的にされますが、手動では左上のボタンまたは[Ctrl]+[S]でできます。</span>\n",
    "\n",
    "<span style=\"color:red\">加えて、CESのレポート提出機能でファイルを提出した後には、必ずPreviewで内容を確認するようにしてください。</span>"
   ]
  }
 ],
 "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.8.10"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
