Pythonプログラミング演習問題集

1. コンソール入力を受け取り、最終的に正の整数を返す関数を定義する

def get_positive_integer():
    user_data = input('変換したい文字列を入力してください:')
    if user_data.isdigit():
        return int(user_data)
    return False

2. ユーザー入力を受け取り、最終的に負の整数を返す関数を定義する

def get_negative_integer():
    user_data = input('変換したい文字列を入力してください:')
    if user_data.startswith('-') and user_data.lstrip('-').isdigit():
        return int(user_data)
    return False

3. 数値または文字列を入力として受け取り、整数に変換可能かどうかを返す関数を実装する

def check_integer_convertible():
    user_data = input('変換したい文字列を入力してください:')
    if user_data.isdigit() or (user_data.startswith('-') and user_data[1:].isdigit()):
        return True
    return False  

4. 整数を入力として受け取り、その数が奇数か偶数かを判断して直接出力する関数を実装する

def check_odd_even(number):
    if isinstance(number, int):
        if number % 2 == 1:
            print('奇数です')
        else:
            print('偶数です')
    return False 

5. 入力データの型を判断し、その型を直接出力する関数を実装する

def identify_data_type(data):
    type_list = [str, int, list, set, dict, tuple, float, bool, complex]
    for data_type in type_list:
        if isinstance(data, data_type):
             print(f"データ型: {data_type.__name__}") 

6. キーボード入力を繰り返し受け取り、ユーザーが'q'または'Q'を入力したら終了する。それ以外の場合は、整数に変換可能かどうかを判断し、可能であれば奇数か偶数を出力し、不可能であれば文字列をそのまま出力する関数を実装する

def process_repeated_input():
    while True:
        user_input = input('内容を入力してください:')
        if user_input.lower() == 'q':
            return 0
        
        try:
            num = int(user_input)
            if num % 2 == 0:
                print('偶数です')
            else:
                print('奇数です')
        except ValueError:
            print(user_input)  

7. "k1:v1,...,kn:vn"形式の文字列を受け取り、{'k1':'v1',...,'kn':'vn'}形式の辞書に変換する関数を定義する

def parse_kv_string_to_dict(input_str):
    result_dict = {}
    pairs = input_str.split(',')
    for pair in pairs:
        if ':' in pair:
            key, value = pair.split(':', 1)
            result_dict[key.strip()] = value.strip()
    return result_dict

8. リストとタプル型の反転機能を実現する関数を定義する

def convert_sequence_type(sequence):
    if isinstance(sequence, tuple):
        return list(sequence)
    elif isinstance(sequence, list):
        return tuple(sequence)
    else:
        return "サポートされていないデータ型です"  

9. リスト、タプル、辞書、セットの4種類のデータ型に対してループ処理で要素を出力する関数を実装する。それ以外の型の場合は"データ型がサポートされていません"と出力する

def iterate_supported_collections(data):
    supported_types = [list, tuple, dict, set]
    if any(isinstance(data, t) for t in supported_types):
        if isinstance(data, dict):
            for key in data:
                print(key)
        else:
            for item in data:
                print(item)
    else:
        print("データ型がサポートされていません") 

10. 単一の集合から重複を削除する機能を実現する関数を定義する

def remove_duplicates(collection):
    if isinstance(collection, set):
        return collection
    
    unique_items = []
    for item in collection:
        if item not in unique_items:
            unique_items.append(item)
    
    if isinstance(collection, tuple):
        return tuple(unique_items)
    return unique_items

11. ファイル(テキストファイルに限定しない)を別のフォルダに移動する機能を実現する関数を定義する

import shutil
def transfer_file(source_path, destination_folder):
    try:
        shutil.move(source_path, destination_folder)
        return True
    except Exception as e:
        print(f"ファイル移動中にエラーが発生しました: {e}")
        return False  

12. 完全なデコレータ構文(パラメータ付きデコレータは不要)を記述する

def decorator_wrapper(original_function):
    def wrapper(*args, **kwargs):
        # デコレータ前の処理
        print("関数実行前の処理")
        
        # 元の関数を実行
        result = original_function(*args, **kwargs)
        
        # デコレータ後の処理
        print("関数実行後の処理")
        
        return result
    return wrapper

@decorator_wrapper
def sample_function(*args, **kwargs):
    pass

13. 2つの数値の和を計算するメソッドがあり、両方のパラメータがintまたはfloat型であることを保証するデコレータを追加し、例外が発生しないようにする

def type_check_decorator(func):
    def wrapper(a, b):
        if not (isinstance(a, (int, float)) and isinstance(b, (int, float))):
            print('パラメータが不正です')
            return False
        return func(a, b)
    return wrapper

@type_check_decorator
def calculate_sum(x, y):
    return x + y  

14. 英文の人名を一度入力して返すメソッドがあり、デコレータを追加して処理後の人名の最初の文字が必ず大文字になるようにする

def capitalize_name_decorator(func):
    def wrapper(name):
        # 元の関数を実行
        original_name = func(name)
        # 名前の最初の文字を大文字にする
        return original_name.capitalize() if original_name else original_name
    return wrapper

@capitalize_name_decorator
def get_person_name(full_name):
    return full_name

タグ: Python 関数 デコレータ データ型 文字列処理

7月19日 01:36 投稿