Fukaken's education

ABOUT

このウェブサイトはFukakenのプログラム班のPythonの練習問題を取り扱っています。
この問題を解くことで、Pythonの基本的な文法や構文を学ぶことができます。

PYTHON EXERCISES

以下の問題はPythonを学ぶ上で欠かせない基礎となっています。

初級編

Pythonの基本的な文法や構文を学ぶための問題です。

問題 1: 数の合計を計算する

1+1の計算結果を出力するプログラムを作成してください。

ヒント

print文を使用しよう。

解答例

print(1 + 1)

問題 2: 文字列を使おう

自分の好きな言葉をprint文を使って表示してください。

ヒント

print("ここに好きな言葉") と書こう。

解答例

print("プログラミングは楽しい!")

問題 3: 文字列の繰り返し

「Python!」という文字列を3回繰り返して表示してください。

ヒント

*演算子を使おう。例: "Python!" * 3

解答例

print("Python!" * 3)

問題 4: 文字列の長さを測ろう

自分の名前の文字数を表示するプログラムを書いてください。

ヒント

len()関数を使おう。例: len("たろう")

解答例

print(len("たろう"))

問題 5: 文字列を一部取り出そう

「Programming」という文字列の最初の5文字だけを表示してください。

ヒント

スライスを使おう。例:"Programming"[0:5]

解答例

print("Programming"[0:5])

問題 6: 文字列を置き換えよう

「I like cats.」という文字列の「cats」を「dogs」に置き換えて表示してください。

ヒント

replaceメソッドを使おう。例: text.replace("cats", "dogs")

解答例

text = "I like cats." print(text.replace("cats", "dogs"))

問題 7: 入力を受け取って表示しよう

キーボードから自分の名前を入力し、「こんにちは、〇〇さん!」と表示するプログラムを書いてください。

ヒント

input()関数を使って入力を受け取ろう。

解答例

name = input("あなたの名前を入力してください: ") print(f"こんにちは、{name}さん!")

問題 8: 正負を判定しよう

整数が正の数か負の数かを判定して、「正の数です」または「負の数です」と表示するプログラムを作成してください。

ヒント

if 文を使って、数が 0 より大きいかを判定しよう。

解答例

num = int(input("整数を入力してください: ")) if num > 0: print("正の数です") elif num < 0: print("負の数です") else: print("0です")

問題 9: 偶数か奇数かを判定しよう

数字を1つ入力して、それが偶数なら「偶数です」、奇数なら「奇数です」と表示するプログラムを作ってください。

ヒント

「数 % 2 == 0」なら偶数、「そうでなければ奇数」と判定できます。

解答例

num = int(input("整数を入力してください: ")) if num % 2 == 0: print("偶数です") else: print("奇数です")

問題 10: 1からnまでの数字を表示しよう

ユーザーから整数nを入力してもらい、1からnまでの数字を1行ずつ表示するプログラムを作成してください。

ヒント

range()関数を使って1からnまでの数を生成し、forループで1つずつ表示しよう。

解答例

n = int(input("整数を入力してください: ")) for i in range(1, n + 1): print(i)

問題 11: パスワード認証

ユーザーにパスワードを入力させ、もし「abc123」だったら「ログイン成功」、それ以外は「パスワードが違います」と表示するプログラムを作成してください。

ヒント

if password == "abc123": を使ってみよう。

解答例

password = input("パスワードを入力してください: ") if password == "abc123": print("ログイン成功") else: print("パスワードが違います")

問題 12: 関数を使って2つの数を足し算しよう

2つの数を受け取り、その合計を返す関数add_numbersを作成してください。

ヒント

defを使って関数を定義しよう。

解答例

def add_numbers(a, b): return a + b # 使用例 result = add_numbers(5, 7) print(f"2つの数の合計は {result} です")

問題 13: 関数を使って2つの数を掛け算しよう

2つの数を受け取り、それらを掛け算した結果を返す関数multiply_numbersを作成してください。

ヒント

1. defを使って関数を定義します。

2. 関数の引数として2つの数を受け取ります。

3. returnを使って掛け算の結果を返します。

解答例

def multiply_numbers(a, b): return a * b # 使用例 result = multiply_numbers(3, 4) print(f"掛け算の結果は {result} です")

問題 14: クラスを作ろう

人(Person)クラスを作成し、名前(name)を属性に持たせてください。そして名前を表示するメソッドsay_helloを作成しましょう。

ヒント

1. classを使ってクラスを定義します。

2. __init__メソッドを使って、名前を初期化します。

3. say_helloメソッドを作成し、printで挨拶文を表示します。

解答例

class Person: def __init__(self, name): self.name = name def say_hello(self): print(f"こんにちは、{self.name}さん!") # 使用例 person = Person("たろう") person.say_hello() # 出力: こんにちは、たろうさん!

問題 15: クラスで動物を表現しよう

動物(Animal)クラスを作成し、名前(name)と鳴き声(sound)を属性として持たせてください。そして、鳴き声を表示するメソッドmake_soundを作成しましょう。

ヒント

1. classを使ってクラスを定義します。

2. __init__メソッドを使って、名前と鳴き声を初期化します。

3. make_soundメソッドを作成し、printで鳴き声を表示します。

解答例

class Animal: def __init__(self, name, sound): self.name = name self.sound = sound def make_sound(self): print(f"{self.name}は「{self.sound}」と鳴きます") # 使用例 dog = Animal("犬", "ワンワン") dog.make_sound() # 出力: 犬は「ワンワン」と鳴きます

問題 16: OpenCVで画像を表示する

OpenCVを使って、画像ファイル(たとえば「sample.jpg」)を読み込み、ウィンドウに表示してください。

ヒント

cv2.imread と cv2.imshow を使おう。

解答例

import cv2 # 画像を読み込む image = cv2.imread("sample.jpg") # 画像を表示する cv2.imshow("Sample Image", image) # キー入力待ち cv2.waitKey(0) # ウィンドウを閉じる cv2.destroyAllWindows()

問題 17: NumPyで配列を作成する

NumPyを使って、1から5までの整数が入った配列を作成し、出力してください。

ヒント

np.arrayを使おう。NumPyは「import numpy as np」で読み込もう。

解答例

import numpy as np # 配列を作成 array = np.array([1, 2, 3, 4, 5]) # 配列を出力 print(array)

問題 18: NumPyで配列の合計を計算しよう

NumPyを使って、1から5までの整数が入った配列を作成し、その合計を計算して表示するプログラムを作成してください。

ヒント

np.sum()を使うと配列の合計を簡単に計算できます。

解答例

import numpy as np # 配列を作成 array = np.array([1, 2, 3, 4, 5]) # 配列の合計を計算 total = np.sum(array) # 合計を出力 print(f"配列の合計は {total} です")

応用編

Pythonの応用的な使い方を学ぶための問題です。
ここからはプログラミング班に所属希望の人向けの問題です。
VsCodeを使ってPythonのプログラムを作成することを前提としています。

問題 1: クラスを別ファイルに分けて使おう

初級編 : 問題 15で作ったAnimalクラスを、別ファイル(animal.py)に保存し、メインファイル(main.py)からインポートして使ってみましょう。

ヒント

1. animal.pyというファイルを作成し、その中にAnimalクラスを定義します。

2. main.pyでは、from animal import Animalを使ってインポートします。

解答例

animal.py
class Animal: def __init__(self, name, sound): self.name = name self.sound = sound def make_sound(self): print(f"{self.name}は「{self.sound}」と鳴きます")

main.py
from animal import Animal cat = Animal("猫", "ニャー") cat.make_sound()

問題 2: サーバーとクライアントで通信しよう

Pythonのsocketモジュールを使って、サーバーとクライアントの間で1回だけメッセージを送受信するプログラムを作ってください。 まずはサーバーを起動して、次にクライアントから「こんにちはサーバー」と送信し、サーバーがそのメッセージを受け取って表示するようにしてください。
こちらは2人以上(PC2台以上)で行うことを前提としています。
サーバーは1台、クライアントは1台で接続できるようにしてください。

ヒント
  • socket.socket()で通信ソケットを作成できます。
  • サーバーでは bind(), listen(), accept() を使います。
  • クライアントでは connect() を使ってサーバーに接続します。
  • メッセージは send() / recv() を使ってやり取りします。
解答例

server.py

import socket # サーバーの準備 server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) server_socket.bind(("localhost", 50007)) server_socket.listen(1) print("サーバー起動中... 接続待機中") conn, addr = server_socket.accept() print(f"{addr} から接続されました") data = conn.recv(1024) print("受信メッセージ:", data.decode()) conn.close() server_socket.close()

client.py

import socket client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) client_socket.connect(("localhost", 50007)) message = "こんにちはサーバー" client_socket.send(message.encode()) client_socket.close()

問題 3: OpenCVでQRコードを読み取ろう

QRコードを読み取るプログラムを作成してください。カメラで撮影した画像からQRコードを検出し、その中のテキストを表示するようにします。

以下のコードには関数get_qr_text()が定義されています。これを活用して、カメラから1枚画像を取得し、QRコードを読み取る処理を完成させましょう。

ヒント
  • OpenCVの cv2.VideoCapture(0) を使ってカメラを起動できます。
  • ret, frame = cap.read() で1枚の画像を取得します。
  • get_qr_text(frame) を使ってQRコードの内容を取得できます。
QRコード読み取り関数 import cv2, numpy from pyzbar.pyzbar import decode, ZBarSymbol """ Attributes: frame (numpy.ndarray) : カメラ画像などの画像データ """ def get_qr_text(frame: numpy.ndarray): value = decode(frame, symbols=[ZBarSymbol.QRCODE]) return '\n'.join(list(map(lambda code: code.data.decode('utf-8'), value)))
解答例(カメラから1枚撮影し、QRコードを表示) import cv2 from your_qr_module import get_qr_text # ↑関数を別ファイルにした場合 cap = cv2.VideoCapture(0) ret, frame = cap.read() cap.release() if ret: result = get_qr_text(frame) if result: print("読み取ったQRコードの内容:") print(result) else: print("QRコードが見つかりませんでした。") else: print("カメラから画像を取得できませんでした。")

問題 4: コントローラーの入力を取得してみよう

ゲームコントローラーを接続し、ボタンが押されたときにその情報をターミナルに表示するプログラムを作成してください。
このプログラムでは、pygameライブラリを使用します。

ヒント
  • pygame.joystickモジュールを使ってコントローラーにアクセスできます。
  • pygame.event.get() を使って入力イベントを取得します。
  • 繰り返し処理(while)を使ってリアルタイムに反応させましょう。
解答例 import pygame import time # 初期化 pygame.init() pygame.joystick.init() # 接続されたコントローラーの数を確認 if pygame.joystick.get_count() == 0: print("コントローラーが接続されていません") exit() # 最初のコントローラーを使う joystick = pygame.joystick.Joystick(0) joystick.init() print(f"使用中のコントローラー: {joystick.get_name()}") print("ボタンを押すと反応します(Ctrl+Cで終了)") try: while True: pygame.event.pump() # イベントの更新 for i in range(joystick.get_numbuttons()): if joystick.get_button(i): print(f"ボタン {i} が押されました") time.sleep(0.1) except KeyboardInterrupt: print("終了しました") pygame.quit()

ADDITION

この練習問題を終えて更に発展的な内容を学習することを希望する場合には、自分から学習を進めていくことをお勧めします。
例えば、カメラ映像を使った画像処理や、OpenCVを使った画像認識などの分野やRaspberry Pi , Ardiuno, esp32などの
ハードを用いる分野があります。
また、Raspberry Piを使ったカメラモジュールの映像をネットワーク経由で別PCに表示することもできます。

これからは大会で使う技術を自力で磨いていってほしいです。
(一年生は水中ロボットフェスティバル ジュニア部門に向けて、Raspberry Piとesp32を扱えるようになってほしいです)
わからない内容があれば、先輩に聞いてみてください。

RECOMMEND

やみとものプログラミング日記「【ラズベリーパイ】カメラモジュールの映像をネットワーク経由で別PCに表示する方法」
https://yamitomo.com/article/134

note「Raspberry Piでソケット通信事始め。受信側を作ろう(Python、socket)」
https://note.com/marupeke296/n/nd4370d8a83ef

天下一反省会「PS4コントローラーの入力をpythonプログラム上で取得する方法を紹介」
https://www.tenkaichi-hanseikai.com/entry/2022/10/18/153148

Lang-ship「ESP32のサーバーサイドTCP/IPでのSocket通信」
https://lang-ship.com/blog/work/esp32-tcp-ip-socket/

CONTACT

お問合わせは下記のSNSからご連絡をください。

GitHub

GitHub

Email

Email

↑ Top