以下の問題はPythonを学ぶ上で欠かせない基礎となっています。
Pythonの基本的な文法や構文を学ぶための問題です。
1+1の計算結果を出力するプログラムを作成してください。
print文を使用しよう。
print(1 + 1)
自分の好きな言葉をprint文を使って表示してください。
print("ここに好きな言葉") と書こう。
print("プログラミングは楽しい!")
「Python!」という文字列を3回繰り返して表示してください。
*演算子を使おう。例: "Python!" * 3
print("Python!" * 3)
自分の名前の文字数を表示するプログラムを書いてください。
len()関数を使おう。例: len("たろう")
print(len("たろう"))
「Programming」という文字列の最初の5文字だけを表示してください。
スライスを使おう。例:"Programming"[0:5]
print("Programming"[0:5])
「I like cats.」という文字列の「cats」を「dogs」に置き換えて表示してください。
replaceメソッドを使おう。例: text.replace("cats", "dogs")
text = "I like cats."
print(text.replace("cats", "dogs"))
キーボードから自分の名前を入力し、「こんにちは、〇〇さん!」と表示するプログラムを書いてください。
input()関数を使って入力を受け取ろう。
name = input("あなたの名前を入力してください: ")
print(f"こんにちは、{name}さん!")
整数が正の数か負の数かを判定して、「正の数です」または「負の数です」と表示するプログラムを作成してください。
if 文を使って、数が 0 より大きいかを判定しよう。
num = int(input("整数を入力してください: "))
if num > 0:
print("正の数です")
elif num < 0:
print("負の数です")
else:
print("0です")
数字を1つ入力して、それが偶数なら「偶数です」、奇数なら「奇数です」と表示するプログラムを作ってください。
「数 % 2 == 0」なら偶数、「そうでなければ奇数」と判定できます。
num = int(input("整数を入力してください: "))
if num % 2 == 0:
print("偶数です")
else:
print("奇数です")
ユーザーから整数nを入力してもらい、1からnまでの数字を1行ずつ表示するプログラムを作成してください。
range()関数を使って1からnまでの数を生成し、forループで1つずつ表示しよう。
n = int(input("整数を入力してください: "))
for i in range(1, n + 1):
print(i)
ユーザーにパスワードを入力させ、もし「abc123」だったら「ログイン成功」、それ以外は「パスワードが違います」と表示するプログラムを作成してください。
if password == "abc123": を使ってみよう。
password = input("パスワードを入力してください: ")
if password == "abc123":
print("ログイン成功")
else:
print("パスワードが違います")
2つの数を受け取り、その合計を返す関数add_numbers
を作成してください。
defを使って関数を定義しよう。
def add_numbers(a, b):
return a + b
# 使用例
result = add_numbers(5, 7)
print(f"2つの数の合計は {result} です")
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} です")
人(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() # 出力: こんにちは、たろうさん!
動物(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() # 出力: 犬は「ワンワン」と鳴きます
OpenCVを使って、画像ファイル(たとえば「sample.jpg」)を読み込み、ウィンドウに表示してください。
cv2.imread と cv2.imshow を使おう。
import cv2
# 画像を読み込む
image = cv2.imread("sample.jpg")
# 画像を表示する
cv2.imshow("Sample Image", image)
# キー入力待ち
cv2.waitKey(0)
# ウィンドウを閉じる
cv2.destroyAllWindows()
NumPyを使って、1から5までの整数が入った配列を作成し、出力してください。
np.arrayを使おう。NumPyは「import numpy as np」で読み込もう。
import numpy as np
# 配列を作成
array = np.array([1, 2, 3, 4, 5])
# 配列を出力
print(array)
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のプログラムを作成することを前提としています。
初級編 : 問題 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()
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()
QRコードを読み取るプログラムを作成してください。カメラで撮影した画像からQRコードを検出し、その中のテキストを表示するようにします。
以下のコードには関数get_qr_text()
が定義されています。これを活用して、カメラから1枚画像を取得し、QRコードを読み取る処理を完成させましょう。
cv2.VideoCapture(0)
を使ってカメラを起動できます。ret, frame = cap.read()
で1枚の画像を取得します。get_qr_text(frame)
を使って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)))
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("カメラから画像を取得できませんでした。")
ゲームコントローラーを接続し、ボタンが押されたときにその情報をターミナルに表示するプログラムを作成してください。
このプログラムでは、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()
この練習問題を終えて更に発展的な内容を学習することを希望する場合には、自分から学習を進めていくことをお勧めします。
例えば、カメラ映像を使った画像処理や、OpenCVを使った画像認識などの分野やRaspberry Pi , Ardiuno, esp32などの
ハードを用いる分野があります。
また、Raspberry Piを使ったカメラモジュールの映像をネットワーク経由で別PCに表示することもできます。
これからは大会で使う技術を自力で磨いていってほしいです。
(一年生は水中ロボットフェスティバル ジュニア部門に向けて、Raspberry Piとesp32を扱えるようになってほしいです)
わからない内容があれば、先輩に聞いてみてください。
やみとものプログラミング日記「【ラズベリーパイ】カメラモジュールの映像をネットワーク経由で別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/
お問合わせは下記のSNSからご連絡をください。