Pythonは、世界的に広く使われている汎用プログラミング言語の1つで、そのシンプルな文法と豊富な標準ライブラリによって多くの人に愛されています。この記事ではPythonプログラマーに向けて、初心者向けの練習問題50問と中級者向けの演習問題を紹介し回答例を掲載しています。
演習問題はプログラミングのコーディング面接などを参考に作成しました。私は過去にスタートアップでマネージャーを経験しておりエンジニアの採用業務にも携わっていたので実践的なコーディング面接対策として参考になると思います。競技プログラミングの一般的な問題よりは優しいけれど、OJT(On the Job Trainig)で学習しながら業務に対応できるレベル感のプログラマーを想定した中級者向けの問題になっています。
これらの問題は、Pythonの基礎から応用まで網羅しており、Pythonを学びたい方にとって非常に有益な資料となるでしょう。
こちらもCheck!プログラミング初心者に人気の記事
- Python練習問題50問(初級者向け)~解答は記事後半に記載!
- 問題1: 変数
- 問題2: swap
- 問題3: 四則演算+
- 問題4: 余り
- 問題5: べき乗
- 問題6: if,比較演算子<, >
- 問題7: 比較演算子==, bool
- 問題8: 文字列(ランダムアクセス)
- 問題9: 文字列(結合)
- 問題10: 文字列(format)
- 問題11: 文字列(replace)
- 問題12: 文字列(lower)
- 問題13: 文字列(upper)
- 問題14: 文字列(文字数)
- 問題15: 文字列 → 数値
- 問題16: リスト
- 問題17: リスト(結合)
- 問題18: リスト(append)
- 問題19: リスト(insert)
- 問題20: リスト(forによる捜査)
- 問題21: リスト(forによる捜査, enumerate)
- 問題22: リスト(len)
- 問題23: リスト,if(存在確認)
- 問題24: タプル,リストの負の添え字
- 問題25: 辞書
- 問題26: 辞書(keys)
- 問題27: 辞書(values)
- 問題28: 辞書(items)
- 問題29: 辞書(キーの存在確認)
- 問題30: スライス1
- 問題31: スライス2
- 問題32: スライス3
- 問題33: 集合
- 問題34: 積集合
- 問題35: 和集合
- 問題36: 差集合
- 問題37: 型の確認
- 問題38: strip
- 問題39: split
- 問題40: join
- 問題41: max
- 問題42: min
- 問題43: sum
- 問題44: 昇順ソート
- 問題45: ラムダ式
- 問題46: range()
- 問題47: 内包表記
- 問題48: 例外処理
- 問題49: ビット演算
- 問題50: モジュールのインポート
- Pythonの演習問題(中級者向け)
- 演習1: forのネスト
- 演習2: 辞書の値ソート
- 演習3: num2freq
- 演習4: word2freq
- 演習5: Jaccard係数
- 演習6: fizzbuzz
- 演習7: 九九表
- 演習8: 素数判定
- 演習9: フィボナッチ数列
- 演習10: オブジェクト指向プログラミング
- 演習11: Webスクレイピング
- 演習12: データ分析
- 演習13: 機械学習
- 演習14: 自然言語処理
- 演習15: ゲームAI
- 演習16: データベース
- 演習17: Webアプリケーション
- 演習18: クラウドサービス
- 演習19: テスト駆動開発
- 演習20: データ構造とアルゴリズム
- 演習21: マルチスレッド
- 演習22: REST API
- 演習23: クローリング・スクレイピング
- 演習24: 自動化
- 演習25: ディープラーニング
- 演習26: 自然言語処理
- 演習27: 機械学習
- 演習28: ゲーム開発
- 演習29: Webアプリケーション
- 演習30: データ解析
- 演習31: 音声認識
- 演習32: 自己相関
- 演習33: モンテカルロ法
- 演習34: レコメンドシステム
- 演習35: ブラウザ自動化
- 演習36: テキスト分類
- 演習37: データ可視化
- 演習38: クラスタリング
- Python練習問題50問の解答
Python練習問題50問(初級者向け)~解答は記事後半に記載!
問題1: 変数
- 整数型の変数xに10を代入して、その値を出力してください。
- 文字列型の変数nameに”John”を代入して、その値を出力してください。
- 実数型の変数piに3.14を代入して、その値を出力してください。
問題2: swap
- 2つの整数型変数xとyにそれぞれ10と20を代入して、xとyの値を交換してください。
- 2つの文字列型変数name1とname2にそれぞれ”John”と”Jane”を代入して、name1とname2の値を交換してください。
問題3: 四則演算+
- 整数型の変数xとyにそれぞれ10と20を代入して、xとyを足した値を出力してください。
- 文字列型の変数nameとmessageにそれぞれ”John”と”Hello”を代入して、messageとnameを結合して”Hello John”と出力してください。
問題4: 余り
- 整数型の変数xに27を代入して、xを3で割った余りを出力してください。
- 整数型の変数yに35を代入して、yを7で割った余りを出力してください。
問題5: べき乗
- 整数型の変数xに3を代入して、xの2乗を出力してください。
- 整数型の変数yに4を代入して、yの3乗を出力してください。
問題6: if,比較演算子<, >
- 整数型の変数xとyにそれぞれ10と20を代入して、xがyより小さい場合は”x is less than y”、xがyより大きい場合は”x is greater than y”、xとyが等しい場合は”x equals y”と出力してください。
- 整数型の変数aとbにそれぞれ15と30を代入して、aがbより小さい場合は”a is less than b”、aがbより大きい場合は”a is greater than b”、aとbが等しい場合は”a equals b”と出力してください。
問題7: 比較演算子==, bool
- 整数型の変数xに10を代入して、xが10と等しい場合はTrue、そうでない場合はFalseを出力してください。
- 文字列型の変数nameに”John”を代入して、nameが”John”と等しい場合はTrue、そうでない場合はFalseを出力してください。
問題1~7の内容の内容をマスターするにはこちらの記事を参考に
問題8: 文字列(ランダムアクセス)
- 文字列型の変数sに”hello”を代入して、sの2番目の文字を出力してください。 2. 文字列型の変数messageに”Good morning”を代入して、messageの6番目の文字を出力してください。
問題9: 文字列(結合)
- 文字列型の変数s1に”Hello,”を代入し、文字列型の変数s2に”world!”を代入して、s1とs2を結合した文字列を出力してください。
- 文字列型の変数nameに”John”を代入し、文字列型の変数greetingに”Hello”を代入して、greetingとnameを結合した文字列を出力してください。
問題10: 文字列(format)
- 整数型の変数xに10を代入して、”x is 10″という文字列をformatを使って出力してください。
- 文字列型の変数nameに”John”を代入して、”My name is John.”という文字列をformatを使って出力してください。
問題11: 文字列(replace)
- 文字列型の変数messageに”Good morning, John!”を代入し、”John”を”Jane”に置換して、置換後の文字列を出力してください。
- 文字列型の変数sに”apple, banana, cherry”を代入し、”banana”を”orange”に置換して、置換後の文字列を出力してください。
問題12: 文字列(lower)
- 文字列型の変数sに”Hello”を代入し、sを全て小文字に変換して出力してください。
- 文字列型の変数messageに”GOOD AFTERNOON”を代入し、messageを全て小文字に変換して出力してください。
問題13: 文字列(upper)
- 文字列型の変数sに”world”を代入し、sを全て大文字に変換して出力してください。
- 文字列型の変数messageに”good evening”を代入し、messageを全て大文字に変換して出力してください。
問題14: 文字列(文字数)
- 文字列型の変数sに”Hello, world!”を代入し、sの文字数を出力してください。
- 文字列型の変数messageに”Good night”を代入し、messageの文字数を出力してください。
問題15: 文字列 → 数値
- 文字列型の変数sに”123″を代入し、sを整数型に変換して出力してください。
- 文字列型の変数sに”3.14″を代入し、sを浮動小数点型に変換して出力してください。
問題8~15の内容をマスターするにはこちらの記事を参考に
問題16: リスト
- 空のリストaを作成し、整数型の値10をaに追加してください。
- 空のリストbを作成し、整数型の値1から5までをbに追加してください。
問題17: リスト(結合)
- リストaに整数型の値20を追加し、リストaとリストbを結合して新しいリストcを作成してください。
- リストxに文字列型の要素”apple”と”banana”を追加し、リストyに文字列型の要素”cherry”を追加し、リストxとリストyを結合して新しいリストzを作成してください。
問題18: リスト(append)
- 空のリストaを作成し、整数型の値1をaに追加して、次に整数型の値2をaに追加して、aの内容を出力してください。
- 空のリストbを作成し、文字列型の要素”apple”をbに追加して、次に文字列型の要素”banana”をbに追加して、bの内容を出力してください。
問題19: リスト(insert)
- リストaに整数型の値1, 3, 4を追加して、整数型の値2をリストaの2番目に挿入してください。その後、aの内容を出力してください。
- リストbに文字列型の要素”apple”, “banana”, “cherry”を追加して、文字列型の要素”orange”をリストbの3番目に挿入してください。その後、bの内容を出力してください。
問題20: リスト(forによる捜査)
- リストaに整数型の要素1から5までを追加し、forループを使ってリストaの全ての要素を出力してください。
- リストbに文字列型の要素”apple”, “banana”, “cherry”を追加し、forループを使ってリストbの全ての要素を出力してください。
問題21: リスト(forによる捜査, enumerate)
- リストaに整数型の要素1から5までを追加し、forループとenumerateを使って、リストaのインデックスと要素を出力してください。
- リストbに文字列型の要素”apple”, “banana”, “cherry”を追加し、forループとenumerateを使って、リストbのインデックスと要素を出力してください。
問題22: リスト(len)
- リストaに整数型の要素1から5までを追加し、リストaの要素数を出力してください。
- リストbに文字列型の要素”apple”, “banana”, “cherry”を追加し、リストbの要素数を出力してください。
問題23: リスト,if(存在確認)
- リストaに整数型の要素1から5までを追加し、リストaに整数型の要素3が含まれている場合は”3 is in a”、そうでない場合は”3 is not in a”と出力してください。 2. リストbに文字列型の要素”apple”, “banana”, “cherry”を追加し、リストbに文字列型の要素”banana”が含まれている場合は”banana is in b”、そうでない場合は”banana is not in b”と出力してください。
問題24: タプル,リストの負の添え字
- タプルtに整数型の要素1から5までを代入し、tの最後の要素を出力してください。
- リストaに整数型の要素1から5までを代入し、aの最後の要素を負の添え字で出力してください。
問題16~24の内容をマスターするにはこちらの記事を参考に
問題25: 辞書
- 空の辞書dを作成し、”apple”というキーに整数型の値100を、”banana”というキーに整数型の値200を、”cherry”というキーに整数型の値300を、dに追加してください。
- 空の辞書eを作成し、”John”というキーに文字列型の値”male”を、”Jane”というキーに文字列型の値”female”を、”Mike”というキーに文字列型の値”male”を、eに追加してください。
問題26: 辞書(keys)
- 辞書dに対して、keysメソッドを使って、dの全てのキーを出力してください。
- 辞書eに対して、keysメソッドを使って、eの全てのキーを出力してください。
問題27: 辞書(values)
- 辞書dに対して、valuesメソッドを使って、dの全ての値を出力してください。
- 辞書eに対して、valuesメソッドを使って、eの全ての値を出力してください。
問題28: 辞書(items)
- 辞書dに対して、itemsメソッドを使って、dの全てのキーと値の組み合わせを出力してください。
- 辞書eに対して、itemsメソッドを使って、eの全てのキーと値の組み合わせを出力してください。
問題29: 辞書(キーの存在確認)
- 辞書dに対して、キー”banana”が含まれている場合は”banana is in d”、そうでない場合は”banana is not in d”と出力してください。
- 辞書eに対して、キー”Jack”が含まれている場合は”Jack is in e”、そうでない場合は”Jack is not in e”と出力してください。
問題25~29の内容をマスターするにはこちらの記事を参考に
問題30: スライス1
- リストaに整数型の要素1から5までを代入し、aの2番目から4番目までの要素をスライスして出力してください。
- 文字列型の変数sに”Hello, world!”を代入し、sの2番目から6番目までの文字列をスライスして出力してください。
問題31: スライス2
- リストaに整数型の要素1から5までを代入し、aの最後から2番目までの要素をスライスして出力してください。
- 文字列型の変数sに”Hello, world!”を代入し、sの最後から3番目までの文字列をスライスして出力してください。
問題32: スライス3
- リストaに整数型の要素1から5までを代入し、aの全ての要素を逆順にスライスして出力してください。
- 文字列型の変数sに”Hello, world!”を代入し、sの全ての文字列を逆順にスライスして出力してください。
問題30~32の内容をマスターするにはこちらの記事を参考に
問題33: 集合
- 空の集合xを作成し、整数型の値1から5までをxに追加してください。
- 空の集合yを作成し、文字列型の要素”apple”, “banana”, “cherry”をyに追加してください。
問題34: 積集合
- 集合xに整数型の要素1から5までを追加し、集合yに整数型の要素3から7までを追加して、xとyの積集合を出力してください。
- 集合aに文字列型の要素”apple”, “banana”, “cherry”を追加し、集合bに文字列型の要素”banana”, “cherry”, “orange”を追加して、aとbの積集合を出力してください。
問題35: 和集合
- 集合xに整数型の要素1から5までを追加し、集合yに整数型の要素3から7までを追加して、xとyの和集合を出力してください。
- 集合aに文字列型の要素”apple”, “banana”, “cherry”を追加し、集合bに文字列型の要素”banana”, “cherry”, “orange”を追加して、aとbの和集合を出力してください。
問題36: 差集合
- 集合xに整数型の要素1から5までを追加し、集合yに整数型の要素3から7までを追加して、xとyの差集合を出力してください。 2. 集合aに文字列型の要素”apple”, “banana”, “cherry”を追加し、集合bに文字列型の要素”banana”, “cherry”, “orange”を追加して、aとbの差集合を出力してください。
問題33~36の内容をマスターするにはこちらの記事を参考に
問題37: 型の確認
- 変数aに整数型の値1を代入し、type関数を使ってaの型を出力してください。
- 変数bに文字列型の値”hello”を代入し、type関数を使ってbの型を出力してください。
問題38: strip
- 文字列型の変数sに” Hello, world! “を代入し、sの両端の空白を取り除いた文字列を出力してください。
- 文字列型の変数tに”***Hello, world!**”を代入し、tの両端の”“を取り除いた文字列を出力してください。
問題39: split
- 文字列型の変数sに”apple,banana,cherry”を代入し、”,”でsを分割してリストにして出力してください。
- 文字列型の変数tに”Hello, world!”を代入し、”,”でtを分割してリストにして出力してください。
問題40: join
- リストaに文字列型の要素”apple”, “banana”, “cherry”を追加し、aの要素を”,”で結合して文字列にして出力してください。
- リストbに文字列型の要素”Hello”, “world!”を追加し、bの要素を” “で結合して文字列にして出力してください。
問題41: max
- リストaに整数型の要素1から5までを代入し、aの最大値を出力してください。
- リストbに整数型の要素3, 5, 1, 7, 2を追加し、bの最大値を出力してください。
問題42: min
- リストaに整数型の要素1から5までを代入し、aの最小値を出力してください。
- リストbに整数型の要素3, 5, 1, 7, 2を追加し、bの最小値を出力してください。
問題43: sum
- リストaに整数型の要素1から5までを代入し、aの合計値を出力してください。
- リストbに整数型の要素3, 5, 1, 7, 2を追加し、bの合計値を出力してください。
問題44: 昇順ソート
- リストaに整数型の要素3, 5, 1, 4, 2を代入し、aを昇順にソートして出力してください。 2. リストbに文字列型の要素”banana”, “cherry”, “apple”を代入し、bを昇順にソートして出力してください。
問題45: ラムダ式
- リストaに整数型の要素1から5までを代入し、aを昇順にソートしたリストをラムダ式を使って出力してください。
- リストbに文字列型の要素”banana”, “cherry”, “apple”を代入し、bを文字列の長さで昇順にソートしたリストをラムダ式を使って出力してください。
問題46: range()
- for文を使って、range(5)を繰り返し出力してください。
- for文を使って、range(1, 6)を繰り返し出力してください。
問題47: 内包表記
- リストaに整数型の要素1から5までを代入し、aの全ての要素に1を足したリストを内包表記を使って出力してください。
- リストbに文字列型の要素”apple”, “banana”, “cherry”を代入し、bの全ての要素を大文字に変換したリストを内包表記を使って出力してください。
問題48: 例外処理
- try-except文を使って、整数型の変数aに0を代入した場合、aを10で割った値を出力してください。ZeroDivisionErrorが発生した場合は、”division by zero”と出力してください。
- try-except文を使って、文字列型の変数sに”apple”を代入した場合、sの5番目の文字列を出力してください。IndexErrorが発生した場合は、”list index out of range”と出力してください。
問題49: ビット演算
- 整数型の変数aに10を代入し、aの2進数表記を出力してください。
- 整数型の変数bに15を代入し、bの2進数表記を出力してください。そして、aとbの論理積、論理和、排他的論理和を出力してください。
問題50: モジュールのインポート
- mathモジュールをインポートし、mathモジュールのpi定数を出力してください。
- randomモジュールをインポートし、randomモジュールのrandint関数を使って、0以上10以下の整数型の乱数を10個出力してください。
Pythonの演習問題(中級者向け)
Python公式ドキュメントと、注釈でライブラリについて言及している問題についてはライブラリの使い方を調べて答えを出して答えを出しても構いません。ただし直接的に回答を調べた場合は不正解になります。
演習1: forのネスト
リストaに以下のような2次元リストが代入されています。
[[1, 2, 3], [4, 5, 6], [7, 8, 9]]
aの全ての要素を順番に出力してください。
演習2: 辞書の値ソート
辞書aに以下のようなキーと値が代入されています。
{“apple”: 5, “banana”: 2, “cherry”: 8}
aの値を昇順にソートして、以下のようにキーと値を出力してください。
banana: 2 apple: 5 cherry: 8
演習3: num2freq
以下のような整数型のリストaがあります。
[1, 2, 3, 1, 2, 1, 4, 5, 2]
aの要素ごとの出現回数を辞書型で出力してください。
演習4: word2freq
以下のような文字列型のリストbがあります。
[“apple”, “banana”, “apple”, “cherry”, “cherry”, “cherry”, “banana”, “apple”, “apple”, “cherry”]
bの要素ごとの出現回数を辞書型で出力してください。
演習5: Jaccard係数
2つの集合AとBについて、Jaccard係数は、AとBの積集合の要素数をAとBの和集合の要素数で割った値です。以下のような集合AとBがあります。
A = {“apple”, “banana”, “cherry”}
B = {“apple”, “cherry”, “orange”}
AとBのJaccard係数を計算してください。
演習6: fizzbuzz
1から100までの整数を順番に出力していきます。ただし、3の倍数の場合は数の代わりに”Fizz”、5の倍数の場合は”Buzz”、3と5の公倍数の場合は”FizzBuzz”と出力してください。
演習7: 九九表
1から9までの整数を順番に出力していきます。各数値について、1から9までの整数との掛け算の結果を出力してください。出力する形式は”n * m = p”とします。ただし、mがn以下の場合は出力しないようにしてください。
演習8: 素数判定
整数nを引数として受け取り、nが素数であるかどうかを判定する関数is_primeを定義してください。素数であればTrue、そうでなければFalseを返してください。
演習9: フィボナッチ数列
正の整数nを引数として受け取り、n番目のフィボナッチ数列の値を返す関数fibを定義してください。フィボナッチ数列は以下のように定義されます。
・fib(0) = 0 ・fib(1) = 1 ・fib(n) = fib(n-1) + fib(n-2) (n >= 2)
演習10: オブジェクト指向プログラミング
以下の要件を満たすクラスPersonを定義してください。
・属性: 名前(name)、年齢(age) ・メソッド: 年齢を1歳増やす(birthday)
また、Personクラスを継承したクラスStudentを定義してください。Studentクラスには、以下の属性が追加されます。
・属性: 学生番号(student_id) ・メソッド: 学生番号を返す(get_student_id)
演習11: Webスクレイピング
以下のURLにアクセスして、Webスクレイピングを行い、記事タイトルとURLを出力してください。
※PythonのライブラリBeautifulSoupを使って、HTMLから情報を抜き出します。
演習12: データ分析
以下のデータを用いて、平均点を求めてください。
・数学: 80, 90, 70, 85, 95 ・英語: 70, 75, 80, 85, 90 ・国語: 75, 80, 85, 90, 95
演習13: 機械学習
以下のデータを用いて、線形回帰を行い、x=3.5の時のyの値を予測してください。
・x: 1, 2, 3, 4, 5 ・y: 2, 4, 5, 4, 5
※Pythonのライブラリscikit-learnを使って、線形回帰を行います。
演習14: 自然言語処理
以下の文章に含まれる名詞を抽出してください。
“Pythonはオープンソースのプログラミング言語であり、人工知能や機械学習などの分野で広く使われています。”
※PythonのライブラリMeCabを使って、形態素解析を行います。
演習15: ゲームAI
以下のゲームを作成してください。
・2人対戦のゲーム ・最初に2つの整数a,bを決める ・プレイヤー1とプレイヤー2が交互にaからbまでの整数を1つずつ言う ・同じ数を言った場合は負け ・最後に言った数がbと同じ場合は勝ち
※Pythonの標準入力を使って、ユーザーからの入力を受け付けます。
演習16: データベース
以下の要件を満たすデータベースを作成してください。
・データベース名: sample_db ・テーブル名: employee ・カラム: id(int, PRIMARY KEY), name(varchar(50)), age(int), gender(varchar(10))
演習17: Webアプリケーション
以下の要件を満たすWebアプリケーションを作成してください。
・PythonのWebフレームワークFlaskを使用する ・トップページにアクセスすると、”Hello, World!”と表示される ・/aboutページにアクセスすると、自己紹介文が表示される ・/static/css/style.cssを作成し、スタイルを適用する ・/templates/index.htmlを作成し、HTMLを記述する
※PythonのライブラリFlaskを使って、Webアプリケーションを作成します。
演習18: クラウドサービス
以下の要件を満たすクラウドサービスを作成してください。
・PythonのWebフレームワークFlaskを使用する ・AWSのクラウド環境にデプロイする ・トップページにアクセスすると、”Hello, World!”と表示される ・/aboutページにアクセスすると、自己紹介文が表示される ・/static/css/style.cssを作成し、スタイルを適用する ・/templates/index.htmlを作成し、HTMLを記述する
※AWSのサービスElastic Beanstalkを使って、クラウド環境にデプロイします。
演習19: テスト駆動開発
以下の要件を満たす関数を実装してください。また、テスト駆動開発を行ってください。
・関数名: fizzbuzz ・引数: 整数n ・返り値: n以下の3の倍数は”Fizz”、5の倍数は”Buzz”、3と5の公倍数は”FizzBuzz”と変換された文字列を含むリスト
例: fizzbuzz(15) →[“1”, “2”, “Fizz”, “4”, “Buzz”, “Fizz”, “7”, “8”, “Fizz”, “Buzz”, “11”, “Fizz”, “13”, “14”, “FizzBuzz”]
演習20: データ構造とアルゴリズム
以下の要件を満たすプログラムを実装してください。
・与えられた数列aから、重複を取り除いた新しい数列bを作成する ・数列aの要素数は10万以下である
※Pythonの標準ライブラリsetを使用して、数列aから重複を取り除いた数列bを作成します。
演習21: マルチスレッド
以下の要件を満たすマルチスレッドプログラムを実装してください。
・1から100までの整数を順番に出力していく ・ただし、3の倍数の場合は数の代わりに”Fizz”、5の倍数の場合は”Buzz”、3と5の公倍数の場合は”FizzBuzz”と出力する ・スレッドを3つ作成し、それぞれが出力する数値の範囲は以下の通りとする ・スレッド1: 133 ・スレッド2: 3466 ・スレッド3: 67~100
※Pythonの標準ライブラリthreadingを使用して、マルチスレッド処理を行います。
演習22: REST API
以下の要件を満たすREST APIを作成してください。
・PythonのWebフレームワークFlaskを使用する ・以下のURLにアクセスすると、ユーザー一覧がJSON形式で返される ・URL: /users ・HTTPメソッド: GET ・レスポンス: {“users”: [{“id”: 1, “name”: “Alice”}, {“id”: 2, “name”: “Bob”}]}
・以下のURLにアクセスすると、指定されたユーザーの情報がJSON形式で返される ・URL: /users/:id ・HTTPメソッド: GET ・パラメータ: id (ユーザーID) ・レスポンス: {“user”: {“id”: 1, “name”: “Alice”, “age”: 20}}
・以下のURLにアクセスすると、新しいユーザーを登録できる ・URL: /users ・HTTPメソッド: POST ・リクエストボディ: {“name”: “Charlie”, “age”: 30} ・レスポンス: {“user”: {“id”: 3, “name”: “Charlie”, “age”: 30}}
※PythonのWebフレームワークFlaskを使って、REST APIを作成します。
演習23: クローリング・スクレイピング
以下の要件を満たすクローリング・スクレイピングプログラムを実装してください。
・指定されたURLにアクセスし、HTMLを取得する ・URL: https://www.python.org/・取得したHTMLから、以下の情報を抽出する ・タイトル ・説明文 ・イベントのタイトルと開催日時(最大5件) ・取得した情報を表示する
※PythonのライブラリrequestsとBeautifulSoup4を使って、WebページのHTMLを取得し、情報を抽出します。
演習24: 自動化
以下の要件を満たす自動化プログラムを実装してください。
・指定されたフォルダ内の画像を、リサイズして保存する ・フォルダ名: images ・リサイズ後の画像サイズ: 幅500px、縦はアスペクト比に応じて自動的に決定 ・保存先フォルダ名: resized_images
※PythonのライブラリPillowを使って、画像をリサイズします。
演習25: ディープラーニング
以下の要件を満たすディープラーニングプログラムを実装してください。
・MNISTデータセットを用いて、手書き数字の認識を行う ・ニューラルネットワークのアーキテクチャは自由に決定する ・訓練データの正解率が90%以上、テストデータの正解率が85%以上であることを目指す
※PythonのライブラリTensorFlowを使って、ディープラーニングを実装します。
演習26: 自然言語処理
以下の要件を満たす自然言語処理プログラムを実装してください。
・テキストファイルから文章を読み込む ・文章から、形態素解析により名詞を抽出する ・抽出した名詞を、出現頻度の高い順に10件表示する
※PythonのライブラリMeCabを使って、形態素解析を行います。
演習27: 機械学習
以下の要件を満たす機械学習プログラムを実装してください。
・Irisデータセットを用いて、アヤメの品種分類を行う ・分類器のアルゴリズムは自由に決定する ・訓練データの正解率が90%以上、テストデータの正解率が85%以上であることを目指す
※Pythonのライブラリscikit-learnを使って、機械学習を実装します。
演習28: ゲーム開発
以下の要件を満たすシンプルなゲームを実装してください。
・プレイヤーが操作するキャラクターを画面上に表示する ・キャラクターはキーボードで操作することができる ・←キー: 左に移動する ・→キー: 右に移動する ・↑キー: ジャンプする ・キャラクターが画面外に出たら、画面の反対側から再度表示される ・障害物を画面上に表示し、キャラクターが接触するとゲームオーバーとなる ・ゲームオーバー時にスコアを表示する
※PythonのライブラリPygameを使って、ゲームを実装します。
演習29: Webアプリケーション
以下の要件を満たすWebアプリケーションを作成してください。
・ユーザー登録・ログイン機能を実装する ・登録されたユーザーは、以下の機能を利用できる ・テキストを投稿する ・他のユーザーの投稿を閲覧する ・投稿に対してコメントする ・ユーザーは、自分の投稿・コメントを編集・削除することができる ・データベースには、MySQLを使用する
※PythonのWebフレームワークFlaskとORMライブラリSQLAlchemyを使って、Webアプリケーションを実装します。
演習30: データ解析
以下の要件を満たすデータ解析プログラムを実装してください。
・Wine Qualityデータセットを用いて、赤ワインの品質を予測する ・データセットの特徴量は11個で、目的変数は”quality”である ・分類器のアルゴリズムは自由に決定する ・交差検証を行い、正解率を評価する
※Pythonのライブラリscikit-learnを使って、データ解析を実装します。
演習31: 音声認識
以下の要件を満たす音声認識プログラムを実装してください。
・マイクからの音声を取得し、音声認識を行う ・認識した言葉をテキストファイルに保存する
※PythonのライブラリSpeechRecognitionを使って、音声認識を実装します。
演習32: 自己相関
以下の要件を満たす自己相関プログラムを実装してください。
・時系列データを読み込み、自己相関関数を計算する ・自己相関関数をグラフに表示する ・自己相関係数が最大となるタイムラグを表示する
※PythonのライブラリNumPyを使って、自己相関を実装します。
演習33: モンテカルロ法
以下の要件を満たすモンテカルロ法プログラムを実装してください。
・半径1の円と、その外接正方形を考える ・正方形に内接するようにランダムに点を打つ ・円の内部にある点の割合を求めることで、円周率を推定する
※Pythonの標準ライブラリrandomを使って、モンテカルロ法を実装します。
演習34: レコメンドシステム
以下の要件を満たすレコメンドシステムを実装してください。
・MovieLensデータセットを用いて、映画のレコメンドを行う ・ユーザーの映画評価データを入力とし、ユーザーにレコメンドする映画を5件表示する ・レコメンドアルゴリズムは自由に決定する
※Pythonのライブラリscikit-learnを使って、レコメンドシステムを実装します。
演習35: ブラウザ自動化
以下の要件を満たすブラウザ自動化プログラムを実装してください。
・Google検索にアクセスし、指定されたキーワードを検索する ・検索結果の上位5件のページにアクセスし、ページタイトルを表示する
※PythonのライブラリSeleniumを使って、ブラウザ自動化を実装します。
演習36: テキスト分類
以下の要件を満たすテキスト分類プログラムを実装してください。
・IMDbデータセットを用いて、映画レビューの肯定/否定を分類する ・分類器のアルゴリズムは自由に決定する ・訓練データの正解率が90%以上、テストデータの正解率が85%以上であることを目指す
※Pythonのライブラリscikit-learnを使って、テキスト分類を実装します。
演習37: データ可視化
以下の要件を満たすデータ可視化プログラムを実装してください。
・Wine Qualityデータセットを用いて、データの分布を可視化する ・特徴量ごとに、ヒストグラムを作成する ・特徴量同士の相関を表すヒートマップを作成する
※Pythonのライブラリmatplotlibとseabornを使って、データ可視化を実装します。
演習38: クラスタリング
以下の要件を満たすクラスタリングプログラムを実装してください。
・Irisデータセットを用いて、アヤメの品種をクラスタリングする ・クラスタリングのアルゴリズムは自由に決定する ・クラスタ数は3とする ・クラスタリング結果を可視化する
※Pythonのライブラリscikit-learnとmatplotlibを使って、クラスタリングを実装します。
Python練習問題50問の解答
【問題1】変数
変数xに10を代入し、変数yに変数xの値に1を足した値を代入してください。
【回答例】
x = 10
y = x + 1
【問題2】swap
変数xに10、変数yに20の値を代入してください。そして、xとyの値を交換してください。
【回答例】
x = 10
y = 20
x, y = y, x
【問題3】四則演算
変数xに10、変数yに2を代入し、xとyの和・差・積・商を計算してください。
【回答例】
x = 10
y = 2
print(x + y) # 和を表示
print(x - y) # 差を表示
print(x * y) # 積を表示
print(x / y) # 商を表示
【問題4】余り
変数xに10、変数yに3を代入し、xをyで割った余りを計算してください。
【回答例】
x = 10
y = 3
print(x % y) # 余りを表示
【問題5】べき乗
変数xに2を代入し、xの3乗を計算してください。
【回答例】
x = 2
print(x ** 3) # べき乗を表示
【問題6】if文、比較演算子<, >
変数xに10を代入し、xが5より大きく10以下の場合に「xは5より大きく、10以下です」と出力してください。
【回答例】
x = 10
if 5 < x <= 10:
print('xは5より大きく、10以下です')
【問題7】比較演算子==, bool
変数xに10を代入し、xが10である場合に「xは10です」と出力してください。
【回答例】
x = 10
if x == 10:
print('xは10です')
【問題8】文字列(ランダムアクセス)
文字列strを定義し、strの4文字目を取得してください。
【回答例】
str = 'Python'
print(str[3]) # 4文字目を表示
【問題9】文字列(結合)
文字列str1と文字列str2を定義し、str1とstr2を結合した文字列を出力してください。
【回答例】
str1 = 'Hello, '
str2 = 'Python!'
print(str1 + str2) # 文字列を結合して表示
【問題10】文字列(format)
文字列str1と文字列str2を定義し、str1とstr2を結合した文字列を出力してください。ただし、str1には{}を1つ含め、formatメソッドを使って、str2を挿入してください。
【回答例】
str1 = 'Hello, {}!'
str2 = 'Python'
print(str1.format(str2)) # formatメソッドを使って文字列を結合して表示
【問題11】文字列(replace)
文字列strを定義し、str中の「A」を「B」に置換した文字列を出力してください。
【回答例】
str = 'ABCDABCD'
print(str.replace('A', 'B')) # 文字列を置換して表示
【問題12】文字列(lower)
文字列strを定義し、strの全ての文字を小文字に変換した文字列を出力してください。
【回答例】
str = 'PyThOn'
print(str.lower()) # 小文字に変換して表示
【問題13】文字列(upper)
文字列strを定義し、strの全ての文字を大文字に変換した文字列を出力してください。
【回答例】
str = 'PyThOn'
print(str.upper()) # 大文字に変換して表示
【問題14】文字列(文字数)
文字列strを定義し、strの文字数を出力してください。
【回答例】
str = 'Python'
print(len(str)) # 文字数を表示
【問題15】文字列 → 数値
文字列strを定義し、strを数値に変換してください。
【回答例】
str = '100'
num = int(str)
print(num) # 数値に変換して表示
【問題16】リスト
リストlistを定義し、1, 2, 3を要素として追加してください。
【回答例】
list = [1, 2, 3]
【問題17】リスト(結合)
リストlist1とリストlist2を定義し、list1とlist2を結合したリストを出力してください。
【回答例】
list1 = [1, 2, 3]
list2 = [4, 5, 6]
print(list1 + list2) # リストを結合して表示
【問題18】リスト(append)
リストlistに4を追加してください。
【回答例】
list = [1, 2, 3]
list.append(4)
print(list) # リストを表示
【問題19】リスト(insert)
リストlistの2番目に4を追加してください。
【回答例】
list = [1, 2, 3]
list.insert(1, 4)
print(list) # リストを表示
【問題20】リスト(forによる捜査)
リストlistを定義し、listの全ての要素をforループを使って表示してください。
【回答例】
list = [1, 2, 3]
for num in list:
print(num) # リストの要素を表示
【問題21】リスト(forによる捜査, enumerate)
リストlistを定義し、listの全ての要素と、その要素のインデックスをforループとenumerate関数を使って表示してください。
【回答例】
list = [1, 2, 3]
for i, num in enumerate(list):
print(i, num) # リストの要素とインデックスを表示
【問題22】リスト(len)
リストlistの要素数を出力してください。
【回答例】
list = [1, 2, 3]
print(len(list)) # リストの要素数を表示
【問題23】リスト、if(存在確認)
リストlistに3が含まれる場合に「3が含まれます」と出力してください。
【回答例】
list = [1, 2, 3]
if 3 in list:
print('3が含まれます')
【問題24】タプル、リストの負の添え字
タプルtupleを定義し、tupleの最後の要素を取得してください。
【回答例】
tuple = (1, 2, 3)
print(tuple[-1]) # 最後の要素を表示
【問題25】辞書
辞書dictを定義し、キーが「apple」で値が「りんご」となる要素を追加してください。
【回答例】
dict = {}
dict['apple'] = 'りんご'
print(dict) # 辞書を表示
【問題26】辞書(keys)
辞書dictを定義し、dictのキーを出力してください。
【回答例】
dict = {'apple': 'りんご', 'orange': 'みかん', 'banana': 'バナナ'}
print(dict.keys()) # キーを出力
【問題27】辞書(values)
辞書dictを定義し、dictの値を出力してください。
【回答例】
dict = {'apple': 'りんご', 'orange': 'みかん', 'banana': 'バナナ'}
print(dict.values()) # 値を出力
【問題28】辞書(items)
辞書dictを定義し、dictのキーと値のペアを出力してください。
【回答例】
dict = {'apple': 'りんご', 'orange': 'みかん', 'banana': 'バナナ'}
print(dict.items()) # キーと値のペアを出力
【問題29】辞書(キーの存在確認)
辞書dictに「apple」というキーが含まれる場合に「appleが含まれます」と出力してください。
【回答例】
dict = {'apple': 'りんご', 'orange': 'みかん', 'banana': 'バナナ'}
if 'apple' in dict:
print('appleが含まれます')
【問題30】スライス1
リストlistを定義し、listの2番目から4番目の要素を取得してください。
【回答例】
list = [1, 2, 3, 4, 5]
print(list[1:4]) # スライスで取得して表示
【問題31】スライス2
リストlistを定義し、listの先頭から3番目までの要素を取得してください。
【回答例】
list = [1, 2, 3, 4, 5]
print(list[:3]) # スライスで取得して表示
【問題32】スライス3
リストlistを定義し、listの4番目以降の要素を取得してください。
【回答例】
list = [1, 2, 3, 4, 5]
print(list[3:]) # スライスで取得して表示
【問題33】集合
集合setを定義し、1, 2, 3を要素として追加してください。
【回答例】
set = {1, 2, 3}
【問題34】積集合
集合set1と集合set2を定義し、set1とset2の積集合を出力してください。
【回答例】
set1 = {1, 2, 3}
set2 = {2, 3, 4}
print(set1 & set2) # 積集合を出力
【問題35】和集合
集合set1と集合set2を定義し、set1とset2の和集合を出力してください。
【回答例】
set1 = {1, 2, 3}
set2 = {2, 3, 4}
print(set1 | set2) # 和集合を出力
【問題36】差集合
集合set1と集合set2を定義し、set1とset2の差集合を出力してください。
【回答例】
set1 = {1, 2, 3}
set2 = {2, 3, 4}
print(set1 - set2) # 差集合を出力
【問題37】型の確認
変数xが文字列型である場合に「xは文字列型です」と出力してください。
【回答例】
x = 'abc'
if type(x) is str:
print('xは文字列型です')
【問題38】strip
文字列strに先頭と末尾に空白文字が含まれている場合に、空白文字を削除してください。
【回答例】
str = ' abc '
print(str.strip()) # 先頭と末尾の空白文字を削除して表示
【問題39】split
文字列strをスペースで区切り、リストに変換してください。
【回答例】
str = 'a b c'
list = str.split() # スペースで区切ってリストに変換
print(list) # リストを表示
【問題40】join
リストlistの要素をスペースで連結した文字列を作成してください。
【回答例】
list = ['a', 'b', 'c']
str = ' '.join(list) # スペースで要素を連結
print(str) # 文字列を表示
【問題41】max
リストlistの最大値を出力してください。
【回答例】
list = [1, 2, 3]
print(max(list)) # 最大値を出力
【問題42】min
リストlistの最小値を出力してください。
【回答例】
list = [1, 2, 3]
print(min(list)) # 最小値を出力
【問題43】sum
リストlistの合計を出力してください。
【回答例】
list = [1, 2, 3]
print(sum(list)) # 合計を出力
【問題44】昇順ソート
リストlistを昇順にソートしてください。
【回答例】
list = [3, 2, 1]
list.sort() # 昇順ソート
print(list) # ソート済みのリストを表示
【問題45】ラムダ式
ラムダ式を用いて、リストlistの各要素に対して2倍した値を持つリストを作成してください。
【回答例】
list = [1, 2, 3]
new_list = list(map(lambda x: x * 2, list)) # ラムダ式で各要素に対して2倍した値を持つリストを作成
print(new_list) # 2倍した値を持つリストを表示
【問題46】range()
0から4までの整数を要素とするリストを作成してください。
【回答例】
list = list(range(5)) # range()を使って0から4までの整数を要素とするリストを作成
print(list) # リストを表示
【問題47】内包表記
0から4までの整数を要素とするリストを内包表記を用いて作成してください。
【回答例】
list = [i for i in range(5)] # 内包表記を使って0から4までの整数を要素とするリストを作成
print(list) # リストを表示
【問題48】例外処理
変数aと変数bを入力値として受け取り、a / bの計算結果を表示してください。ただし、bが0である場合には「0で割ることはできません」と表示してください。
【回答例】
a = int(input())
b = int(input())
try:
result = a / b
print(result)
except ZeroDivisionError:
print('0で割ることはできません')
【問題49】ビット演算
2進数の1010と0101のビット毎のAND、OR、XORを計算してください。
【回答例】
a = 0b1010
b = 0b0101
print(bin(a & b)) # ANDを計算して表示
print(bin(a | b)) # ORを計算して表示
print(bin(a ^ b)) # XORを計算して表示
【問題50】モジュールのインポート
ランダムモジュールをインポートし、0から9までの整数のうち1つをランダムに選んで表示してください。
【回答例】
import random
num = random.randint(0, 9) # 0から9までの整数のうち1つをランダムに選ぶ
print(num) # 選んだ整数を表示
コメント
始めたコメントさせていただきます。
Pythonを勉強中のものです。
勉強の記録としてブログを使っています。
問題を解いていこうとしたおり、ここのサイトを見つけました。
知識もあまりなくぶしつけな質問になって申し訳ないのですが。
個々の問題を解くとき、問題文をブログに乗せてよろしいでしょうか?
答えは自分の答えと、チャットGPTの答えを載せるつもりなので、
お考えになった答えは載せないようにしたいと思うのですが、ご許可いただけないでしょうか?
稚拙な文章で申し訳ありません。
よろしくお願いいたします。
コメントいただき、ありがとうございます。
本記事をブログ内でリンクしていただき、
問題文が本記事からの引用ということが確認できる状態であれば、
ブログに掲載いただいてかまいません。
返信ありがとうございます。
使わせていただきます
ありがとうございます
「本記事をブログ内でリンクしていただき、
問題文が本記事からの引用ということが確認できる状態」
守りながら使わせていただきます