Problem p03545 (python)

Fixed submission:

def conv_bin(i, digit):
    if i & 1 << digit:
        return "+"
    else:
        return "-"


if __name__ == "__main__":
    abcd = input()
    bin_pattern_digit = len(abcd) - 1

    for i in range(1 << bin_pattern_digit):
        # 初期値:一番左の桁の値。
        result = int(abcd[0:1])
        for j in range(bin_pattern_digit):
            # +を入れた場合
            # 例：1234のパターン1「+」2の場合：i=0の時に+2(abcd[1:2])する必要がある。
            #                 3「-」4の場合：i=2の時に-4(abcd[3:4])する必要がある。
            if i & 1 << (bin_pattern_digit - j -1 ):
                # result += int(abcd[j + 1:j + 2])
                result += int(abcd[j + 1])
            # -を入れた場合
            else:
                # result -= int(abcd[j + 1:j + 2])
                result -= int(abcd[j + 1])

        # 合計が7なら終了
        if result == 7:
            break

    # 注意：
    # bit変数(i)の結果を確認する場合、文字列とスライスの併用(str(bit(i[0:1])))は使えない。
    # 数値と同じで、先頭0は消される = 桁数が可変であるため。
    # i & 1 << 0  # 1桁目が真か確認。
    # i & 1 << 1  # 2桁目が真か確認。
    # -dev-
    print(abcd[0:1] + conv_bin(i, 2) + abcd[1:2] + conv_bin(i, 1) + abcd[2:3] + conv_bin(i, 0) + abcd[3:4] + "=7")

Buggy submission (verdict: Runtime Error):
abcd = input()
bin_pattern_digit = len(abcd) - 1

for i in range(1 << bin_pattern_digit):
    # 初期値:一番左の桁の値。
    result = int(abcd[0:1])
    for j in range(bin_pattern_digit):
        # +を入れた場合
        # 例：1234のパターン1「+」2の場合：i=0の時に+2(abcd[1:2])する必要がある。
        #                 3「-」4の場合：i=2の時に-4(abcd[3:4])する必要がある。
        if i & 1 << j:
            result += int(abcd[j + 1:j + 2])
        # -を入れた場合
        else:
            result -= int(abcd[j + 1:j + 2])

    # 合計が7なら終了
    if result == 7:
        break

# 注意：
# bit変数(i)の結果を確認する場合、文字列とスライスの併用(str(bit(i[0:1])))は使えない。
# 数値と同じで、先頭0は消される = 桁数が可変であるため。
# i & 1 << 0  # 1桁目が真か確認。
# i & 1 << 1  # 2桁目が真か確認。
# -dev-
print(abcd[0:1] + conv_bin(i, 2) + abcd[1:2] + conv_bin(i, 1) + abcd[2:3] + conv_bin(i, 0) + abcd[3:4] + "=7")


def conv_bin(i, digit):
    if i & 1 << digit:
        return "+"
    else:
        return "-"

Buggy submission (verdict: Runtime Error):
abcd = input()
bin_pattern_digit = len(abcd) - 1

for i in range(1 << bin_pattern_digit):
    # 初期値:一番左の桁の値。
    result = int(abcd[0:1])
    for j in range(bin_pattern_digit):
        # +を入れた場合
        # 例：1234のパターン1「+」2の場合：i=0の時に+2(abcd[1:2])する必要がある。
        #                 3「-」4の場合：i=2の時に-4(abcd[3:4])する必要がある。
        if i & 1 << j:
            result += int(abcd[j + 1:j + 2])
        # -を入れた場合
        else:
            result -= int(abcd[j + 1:j + 2])

    # 合計が7なら終了
    if result == 7:
        break

# 注意：
# bit変数(i)の結果を確認する場合、文字列とスライスの併用(str(bit(i[0:1])))は使えない。
# 数値と同じで、先頭0は消される = 桁数が可変であるため。
# i & 1 << 0  # 1桁目が真か確認。
# i & 1 << 1  # 2桁目が真か確認。
# -dev-
print(abcd[0:1] + conv_bin(i, 2) + abcd[1:2] + conv_bin(i, 1) + abcd[2:3] + conv_bin(i, 0) + abcd[3:4] + "=7")


def conv_bin(i, digit):
    if i & 1 << digit:
        return "+"
    else:
        return "-"

Buggy submission (verdict: Runtime Error):
abcd = input()
bin_pattern_digit = len(abcd) - 1

for i in range(1 << bin_pattern_digit):
    # 初期値:一番左の桁の値。
    result = int(abcd[0:1])
    for j in range(bin_pattern_digit):
        # +を入れた場合
        # 例：1234のパターン1「+」2の場合：i=0の時に+2(abcd[1:2])する必要がある。
        #                 3「-」4の場合：i=2の時に-4(abcd[3:4])する必要がある。
        if i & 1 << j:
            result += int(abcd[j + 1:j + 2])
        # -を入れた場合
        else:
            result -= int(abcd[j + 1:j + 2])

    # 合計が7なら終了
    if result == 7:
        break

# 注意：
# bit変数(i)の結果を確認する場合、文字列とスライスの併用(str(bit(i[0:1])))は使えない。
# 数値と同じで、先頭0は消される = 桁数が可変であるため。
# i & 1 << 0  # 1桁目が真か確認。
# i & 1 << 1  # 2桁目が真か確認。
# -dev-
print(abcd[0:1] + conv_bin(i, 2) + abcd[1:2] + conv_bin(i, 1) + abcd[2:3] + conv_bin(i, 0) + abcd[3:4] + "=7")