Vicky34 blog.

IT・プログラミングメイン

問題集を解いてみた。

1. 概要

pythonのコーディング力を上げたいと思いました。

2. サイト

調べた結果、CodingBadというサイトが良さそうでした。

3. 実践

3-1. Warmup-2 > string_bits


与えられた文字列を返すと、最初の文字列から始まるすべての文字からなる新しい文字列が返されます。 従って、"Hello"は"Hlo"を生成します。

答え

def string_bits(str):
    result = ""
    for i in range(len(str)):
        if i % 2 == 0:
            result = result + str[i]
    return result

解答

def string_bits(str):
    result = ''
    # これにはいくつかの方法があります。
    # これはすべてのcharに対してiの標準ループを使用し、
    # ループ内では奇数インデックス値をスキップします
    for i in range(len(str)):
        if i % 2 == 0:
            result = result + str[i]
    return result 

3-2. Warmup-2 > string_splosion


“Code"のような空ではない空文字列を指定すると、"CCoCodCode"のような文字列が返されます。

答え

def string_splosion(str):
    length = len(str)

    new_string = ''
    for i in range(length):
        new_string += str[:i+1]

    return new_string

解答

def string_splosion(str):
    result = ''
    for i in range(len(str)):
        result = result + str[:i+1]
    return result

3-3. Warmup-2 > last2


与えられた文字列に対して、文字列中の部分文字列の長さ2と文字列の最後の2文字の数を返します。したがって、 “hixxxhi"は1を返します(終わり部分文字列は数えません)。

答え




解答

def last2(str):
    # 短い文字列の場合除外
    if len(str) < 2:
        return 0

    # 最後の2文字は、str[-2:]と書くことができる
    last2 = str[len(str)-2:]
    count = 0

    # iから始まる部分文字列の長さを調べる
    for i in range(len(str)-2):
        sub = str[i:i+2]
        if sub == last2:
            count = count + 1

    return count

3-4. Warmup-2 > array_count9


与えられたintの配列を返すと、配列中の9の数を返します。

答え

def array_count9(nums):
    # from collections import Counter
    # count9 = Counter(nums)
    # return count9[9]
    count = 0
    for num in nums:
        if num == 9:
            count += 1

    return count

解答

def array_count9(nums):
    count = 0
    # 各値を見るための標準ループ
    for num in nums:
        if num == 9:
            count = count + 1

    return count

3-5. Warmup-2 > array_front9


intの配列が与えられた場合、配列の最初の4つの要素の1つが9の場合はTrueを返します。配列の長さは4未満です。

答え

def array_front9(nums):
    for num in nums[:4]:
        if num == 9:
            return True

    return False

解答

def array_froun9(nums):
    # 最初にループの終わりを示します
    end = len(nums)
    if end > 4:
        end = 4

    for i in range(end):
        if nums[i] == 9:
            return True
    return False

3-6. Warmup-2 > array123


intの配列が与えられている場合、配列1,2、3の配列がどこかの配列に現れた場合にTrueを返します。

答え

def array123(nums):
    new_string = ''
    for num in nums:
        new_string += str(num)

    if '123' in new_string:
        return True

    return False

解答

def array123(nums):
    # Note: iterate with length-2, so can use i+1 and i+2 in the loop
    for i in range(len(nums)-2):
        if nums[i]==1 and nums[i+1]==2 and nums[i+2]==3:
            return True
    return False

3-7. Warmup-2 > string_match


2つの文字列aとbが与えられた場合、同じ長さ2の部分文字列を含む位置の数を返します。したがって、 “xx"、 "aa"、 "az"部分文字列は両方の文字列の同じ場所に表示されるので、 "xxcaazz"と "xxbaaz"は3を返します。

答え

def string_match(a, b):
    length = 0
    if len(a) > len(b):
        length = len(a)
    else:
        length = len(b)

    count = 0
    for i in range(length):
        if i < length-1:
            if a[i:i+2] == b[i:i+2]:
                count += 1

    return count

解答

def string_match(a, b):
    # 文字列が短い図
    shorter = min(len(a), len(b))
    count = 0

    # すべての部分文字列の開始点をループします
    # ここで長さ-1を使用するので、ループ内で char str[i+1] を使用できます
    for i in range(shorter - 1):
        a_sub = a[i:i+2]
        b_sub = b[i:i+2]
        if a_sub == b_sub:
            count = count + 1

    return count

感想

それなりにはできたけどまだまだPythonの勉強が必要そうです。