Python基礎力を圧倒的に向上させる特訓問題

    目次

    文字列の代入フォーマット f ストリング

    以下の文章の〇〇に対して、フォーマットメソッドと f ストリングスを使って文字列を代入しましょう。
    私は〇〇です。〇〇出身です。

    解答
    name=”haruki”
    birthplace=”Wakayama”
    “私は{}です。出身は{}です”.format(name,birthplace)

    name そして birth place という変数を事前に用意しました。こちらのネーム birth place と変数をそれぞれの丸に代入してみたいと思います。まずはフォーマットメソッドを使ったやり方をお伝えします format メソッドはこの文字列に対して後ろに.formatを使用します。

    fストリングスもよく使われます。どのような形かと言うと簡単です。

    name=”haruki”
    birthplace=”Wakayama”
    f”私は{name}です。出身は{birthplace}です”

    この状態は変わらず formatter 後ろにドットフォーマットをしましたが 、fストリングスはこの前にf つける変数を入れます ネームとそして birth place ですねこれを入れてあげることによって文字列の中に直接 変数を代入する埋め込むことができるのが f ストリングスです。

    比較的シンプルわかり やすいかなと思うので私はこちらを使用することをお勧めしています。

    エスケープシーケンス

    次の文字列を 句読点で改行しましょう 。

    「天気がいいな。買い物でも行くか。友達も誘おう。」

    解答
    print(“天気がいいな。\n買い物でも行くか。\n友達も誘おう。”)

    エスケープシーケンスとは特殊文字や特殊記号のようなもので、文字列の中に組み込むことで、改行やタブを表現することができます。今回は改行をお伝えします。

    この文字列の句読点の後ろで、\を入れます。windows の方は¥になると思います。\をもしくは¥を入れて、n を入れて、\n、¥nにしてください。これが改行を表すエスケープシーケンスです。n は改行を意味するニューラインを意味します。

    書式化

    16.0 という値を次の書式で表示しましょう。
    符号付き10進数
    符号付き16進数
    10進浮動小数点

    解答
    print(“10進数=%d, 16進数=%x,10進浮動小数点=%f” %(16,16,16)

    書式化演算子の%を使用することで、数値や文字列に対して新しい文字列を作成することができます。

    大文字小文字への変換

    以下の文字列に対して小文字から大文字、大文字から小文字への変換を行いましょう。
    ・”hello”
    ・”HELLO”

    解答
    “hello”.upper()
    “HELLO”.lower()

    大文字小文字への変化は非常に簡単です。文字列string 型に対してメソッドが用意されています。大文字したければ、.upperとしてあげます。小文字にしたければ.lowerとしてあげると小文字に変換することができます。

    文字列の分割

    下記の文字列を改行部分で分割し、リストに格納しましょう。
    「こんにちは。\n私はロボットです。」

    解答
    message=”こんにちは。\n私はロボットです。”
    message.split(“\n”)
    結果
    [‘こんにちは。’, ‘私はロボットです。’]

    「こんにちは。\n私はロボットです。」ということで、改行エスケープシーケンスが入った文字列です。この文字列メッセージを分割したい場合どのようにするかというと、文字列に対してsplitというメソッドを使用します。どの文字列を基準に分割するか設定します。

    文字列の結合

    以下のリストに入っている文字列を結合して一つの文にし ましょう。
    messages=[‘こんにちは。’, ‘私はロボットです。’]

    解答
    ”.join(messages)
    実行結果
    こんにちは。私はロボットです。


    分けた2つの文字列を再度結合させます 。結合するときに使用するメソッドは、 join を使用します。シングルコーテーション文字列に対して、.joinとします。

    空白除去

    下記の文の初めと最後にある空白を除去しましょう。
    「 ここのお店で買うケーキは、いつもおいしいね。 」

    解答
    mesage=” ここのお店で買うケーキは、いつもおいしいね。 ”
    print(message.strip())
    実行結果
    ここのお店で買うケーキは、いつもおいしいね。


    前後に全角の空白が入っています。これをなくしたい場合、文字列に対して.stripとします。

    文字列の置換

    以下の文の「晴れ」を「雨」に置換してください。
    「今日の天気は晴れです。」

    解答
    message=”今日の天気は晴れです。”
    message.replace(“晴れ”,”雨”)
    実行結果
    今日の天気は雨です。

    messageという文字列に対して、.replace()とします。

    文字列検索

    以下のフレーズの中から夜空を検索し、その位置を出力しましょう。
    「今日はとても夜空がきれいだ。」

    解答
    message=”今日はとても夜空がきれいだ。”
    message.find(“夜空”)
    実行結果
    6

    文字列に対して、 find メソッドというものがあります。その特定の文字列がある位置を出力してくれます。ゼロスタートで0、1、2と数えると6文字目になるので 6という出力結果となりました。

    型変換

    以下のデータ型を文字列型に変換しましょう。
    intx:x=1
    float:x=1.52
    list:x=[1,2,3]
    dict:x=dict(name=”john”,bir)

    解答
    x=1
    str(x)
    x=1.52
    str(x)
    x=[1,2,3]
    str(x)
    x=dict(name=”john”,bir)
    str(x)

    str でこの変数 x を囲ってあげると文字列となります。

    包含関係

    以下の文字列Aが字列 Bに含まれているか確認しましょう。
    A:”sba” B:”gasba”
    A:”xdh” B:”orwe”

    解答
    a,b=”sba” ,”gasba”
    a in b
    実行結果
    True
    a,b=”xdh”,”orwe”
    a in b
    実行結果
    False

    a in bとしてあげます。そうするとこの b の中に a が入っているかという形になり、実際に入っているので True となります。
    下に関しては 、xdhというのはどこにも入っていないので、包含関係は成り立ちません。a in bはFalseとなります。

    特定の値を抽出

    次のリストから先頭から2つめの値と最後の値をそれぞれ出力しましょう。また、2という数値をリストの一番最後に追加しましょう。

    numbers=[0,3,8,-4,9,1]

    解答
    numbers[1]
    3
    numbers[-1]
    1
    numbers.append[2]
    [0,3,8,-4,9,1,2]


    リストの要素前から0、1というふうに数えるので、ここは1番目になるわけですよね。numbersの1番目とすると3という先頭から2つ目の値を取ってくることができます。最後の値というのは、後ろから数えて1番最初の値ですよね。なので-1としてあげると後ろから数えて1つ目の値を取ってくることができます。数値をリストの1番最後に追加したい場合はappendを使用します。

    特定の値を挿入

    先ほどのナンバーズリストの先頭に5を挿入しましょう。また最後から一つ手前に -3を挿入しましょう。

    解答
    numbers=[0,3,8,-4,9,1,2]
    numbers.insert(0,5)
    実行結果
    [5, 0, 3, 8, -4, 9, 1]
    numbers=[0,3,8,-4,9,1,2]
    numbers.insert(-1,-3)
    実行結果
    [5, 0, 3, 8, -4, 9, 1,-3,2]

    特定の値を挿入するにはinsertというメソッドを使用します。まずはこのリストnumbersに対して.insertというメソッドを使用します。
    最後から一つ手前。これも同様でnumbers.insertとします。最後というのは-1でしたよね。

    特定の値を削除

    先ほどのリストから1番目の5と最後から3番目の要素を削除しましょう
    numbers=[5, 0, 3, 8, -4, 9, 1,-3, 2]

    解答
    numbers.remove(5)
    print(numbers)
    実行結果
    [0, 3, 8, -4, 9, 1,-3, 2]
    numbers.pop(-3)
    print(numbers)
    実行結果
    [0, 3, 8, -4, 9,-3, 2]

    今回はremoveとpopというメソッドを使用します。 removeは実際の値を選択します。pop はどの場所の値を削除したいかというふうに、要素のインデックス番号を指定してあげます。

    フィルター

    次の、偶数のみを返す関数とfilter() を用いて先ほどのnumbersリストから偶数のみを取り出したリストを作成しましょう。

    [0, 3, 8, -4, 9, 1,-3, 2]
    def isEven (number):
    if number % 2 == 0:
    print (f’This number, {number} is even!’)
    return True
    else:
    print(f’This number, {number} is odd!’)
    return False

    解答

    フィルターという関数を用いるんですけれども、使い方ちょっと特殊です。

    フィルター関数はこのフィルターをとっていただき、このフィルターの役割を担う関数を()に書きます。今回で言うと isEven というのがそれにあたります。

    list(filter(isEven,numbers))

    何に対してフィルターをかけるかということで、リストを後ろに書きます。今回で言うとnumbersというリストに対してこの isEvenという偶数かどうかを判定する関数に対して、フィルターをかけますよ、というのが出来上がります。これ実行するだけだとフィルターというインスタンスが出てくるだけなんですけれども、これに対してフィルターをかけたものをリスト化しましょう、という風にしてあげることで、リストを作成することができました。

    引数と一致する要素のインデックス

    先ほどの numbers リスト[0, 8, -4, 9, 1,-3, 2]の中から要素が-4のインデックスを取得しましょう。

    解答
    numbers.index(-4)

    インデックスの取得ということで要素番号を取得したい場合どのようにするかというと、非常に簡単です。こちらも numbers.index(-4)としてあげます。インデックスメソッドを使用すると単純に インデックスを取得することができます。

    実行結果
    2

    ソート(昇順/降順)

    先ほどのunmbersリスト[0, 8, -4, 9, 1,-3, 2]の順序を昇順/降順にそれぞれ並び替えましょう。

    解答
    #昇順
    numbers.sort()
    #降順
    numbers.sort(reverse=True)

    それでは回答です相当を行うにはリストのメソッドにあるsortを使用します。numbersというリストに対してsortとしましょう。これ逆に降順にしたい場合numbers.sortに対して、この中の引数reverseに対して true とします。

    要素の削除

    以下の辞書からpopメソッドを使ってキーが AとBである値を削除しましょう。またclearメソッドを使ってすべての要素を削除しましょう。
    dictionary={
    ‘A’:’寺中’,
    ‘B’:’航平’,
    ‘C’:’男性’,
    ‘D’:’東京都’,
    ‘E’:’海外旅行’
    }

    解答

    dictionary.pop(‘A’)
    dictionary.pop(‘B’)
    dictionary.clear()

    情報の取得

    以下の辞書から次の処理を行いましょう

    dictionary={
    ‘A’:’寺中’,
    ‘B’:’航平’,
    ‘C’:’男性’,
    ‘D’:’東京都’,
    ‘E’:’海外旅行’
    }

    キーのみの表示
    値の中に男性という文字列が存在するか
    全てのキーと値の表示

    解答
    #キーを取り出す
    dictionary.keys()
    #値を取り出す
    dictionary.values()
    #値の中に男性という文字列が存在するか
    ‘男性’ in dictionaary.values()
    #全てのキーと値の表示
    for key,value in dictionary.items():
    print (f’キーは、{key},バリューは、{values}’)


    全てのキーと値の表示ということで、 for 文を使います。このitemsというのを使ってあげると、前の2つに値が入ります。キーというものには辞書の中のキーが入り、バリューにはこの辞書の中の値が入ります。

    辞書内の要素検索

    以下の辞書からCとEというキーに対応する値を表示しましょう

    dictionary={
    ‘A’:’寺中’,
    ‘B’:’航平’,
    ‘C’:’男性’,
    ‘D’:’東京都’,
    ‘E’:’海外旅行’
    }

    解答

    普通にこのようにとってくることが出来ます。

    dictionary[‘C’]
    dictionary[‘E’]

    これでもいいんですけれども、今回お伝えしたいのは別の方法です。

    dictionary.get(‘C’)
    dictionary.get(‘E’)

    何が違うのって話なんですけども、キーがないときに、.getの場合、エラーは起こりません。[‘キー’]の場合、エラーが起きるんですね。これが大きな違いです。

    if 文を使って条件分岐

    ifを使って以下の処理を実装してください。
    int型の変数である num =-1を用意し、 numが以下の条件の時、
    コロン(:) 右側の文字列を出力する
    numが正の値の場合 : 正の値です
    numが0の場合 : 0 です
    numが負の値の場合: 負の値です

    解答

    num=-1
    if num>=0:
     print(‘正の値です’)
    elif num==0:
     print(‘0です’)
    else:
     print(‘負の数です’)

    論理演算子を使って複数条件の指定


    条件分岐に対応する実装を行ってください。

    a=3
    aが0以上10未満かつ偶数: 一桁の偶数です
    aが0未満かつ奇数: 負の奇数です
    それ以外: 整数です

    解答

    a=3
    if 0<=a<10 and a%2==0:
     print(‘一桁の偶数です’)
    elif a<0 and a%2==1:
     print(‘負の奇数’)
    else:
     print(”正数です)

    2つの条件を同時に満たす場合、andを使います。%は余剰を求める符号で、偶数なら0、奇数なら1になりますね。

    リストの要素を表示

    下記リストの要素を先頭から順に出力しましょう

    names=[‘John’,’Kevin’,’Louis’]

    解答

    for name in names
     print(name)

    複数の名前が入ったnamesというリストから1つ取り出してnameという変数に入れることが出来ます。これをプリント文で表示してあげると出力することができます。

    range関数

    range関数を用いて0から9を出力しましょう

    for i in range(10:
     print(( i )

    range関数は一定の回数繰り返し使いたいときに用います。このようにしてあげることで0から9までの値を出力することができました。

    繰り返しの強制終了

    0から9を出力する繰り返しで、i=6の時、「終了!」と出力して、ループを抜け出すように出力しましょう。

    for i in range(10)
    if i ==6:
     print(‘終了’)
     break
    print( i )


    ループ処理をやめたいときには何をするかというと、breakを入れます。 このようにすることで6となった時に終了と出力され、breakつまりこのループを終了するような形となります。

    ループの途中で特定の処理を実行

    0から9を出力する繰り返しで、 i =3の時のみ出力結果が出ないように実装しましょう。

    for i in range(10)
    if i ==3:
     continue
    print( i )

    出力結果
    0 1 2 4 5 6 7 8 9

    この処理1回の処理をスキップしたい場合は、continueを使用します。
    このようにすることではい3が飛ばされています。

    複数のリストを同時に処理

    下記2つのリストを用意し、それぞれのリストから姓名を同時に出力しましょう

    lasts=[‘加藤’,’佐藤’,’田中’]
    firstsl=[‘雄一’,’拓也’,’太郎’]

    解答

    for last , first in zip(lasts , firsts)
     print(last + first)

    複数のリストから要素を同時に取り出したい場合というの はzip関数を用います。今回で言うともう最初に書いてしまいますがfor last , first in zip(lasts , firsts)j:として、同時に取得したlistをこの中に入れてあげます。

    要素と同時にインデックス情報の取得

    下記リストを用意し要素とそのインデックスを取得した上で、 xx 番の yy ですと出力しましょう。
    例:0番の加藤です。
    lasts=[‘加藤’,’佐藤’,’田中’]

    解答
    for i ,last in enumarate(lasts):
     print(i , last)

    結果
    0 加藤
    1 佐藤
    2 田中

    これを用いて何番目の何と表示 してあげるために f ストリングを使います。

    for i , last in enumarate(lasts):
     print(f'{i}番目の{last}です’)

    結果
    結果
    0番目の加藤です
    1番目の佐藤です
    2番目の田中です

    内包表記

    以下の2つのパターンで0から9未満の 2の倍数が入ったリストを作成しましょう。
    以下の2つのパターンで0から9未満の2の倍数が入ったリスト
    ([0, 2, 4, 6, 8]) を作成しましょう
    ・空のリストnumsを予め用意しforループ内で.append() 関数を用いて要素を追加する
    ・1行で同様のリスト numbersを作成する

    解答

    nums=[ ]
    for i in range(5):
     nums.append( 2 * i )

    結果
    [0,2,4,6,8]

    k

    今回の本題でもある1行でというのが内包表記になっています。内包表記ちゃんと覚えましょう。非常に便利です。

    numbers=[2 * i for i in range(5)]

    このような、ワンライナー、1行で書く方法を内包表記と呼びます。

    内包表記を使うと、コードが短くなり、読みやすく、効率的になります。

    リスト内包表記(List Comprehensions)

    最も一般的な形はリスト内包表記です。

    基本的な形式は以下のようになります。

    [expression for item in iterable if condition]

    例:

    1から10までの数値を平方してリストに格納する。

    squares = [x*x for x in range(1, 11)]

    セット内包表記(Set Comprehensions)

    セット内包表記もリスト内包表記に非常に似ていますが、結果がセットになります。

    {expression for item in iterable if condition}

    例:

    1から10までの偶数をセットに格納する。

    evens = {x for x in range(1, 11) if x % 2 == 0}

    ディクショナリ内包表記(Dictionary Comprehensions)

    キーと値を指定して、新しいディクショナリを作成できます。

    {key_expression: value_expression for item in iterable if condition}

    例:

    1から5までの数値をキーとして、それぞれの平方を値とするディクショナリを作成する。

    square_dict = {x: x*x for x in range(1, 6)}

    ジェネレータ内包表記(Generator Expressions)

    ジェネレータ内包表記は、リスト内包表記に似ていますが、ジェネレータオブジェクトを返します。

    (expression for item in iterable if condition)

    例:

    1から10までの奇数を生成するジェネレータ。

    odds = (x for x in range(1, 11) if x % 2 != 0)

    これらは基本的な例ですが、内包表記は非常に強力であり、複雑な操作も行えます。ただし、あまりに複雑な内包表記は読みにくくなる可能性があるため、適度に使用することが推奨されます。

    よかったらシェアしてね!
    • URLをコピーしました!
    目次