質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

2回答

1289閲覧

AtCoderの切手問題

ShinyaYAMAGUCHI

総合スコア7

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2021/08/28 07:38

リンク内容
イメージ説明
AtCoderの上のような問題をpythonで解こうとして以下のようなエラーが発生してしましました。解決法をご教授ください、、、
イメージ説明

python

1strlist=list(input()) 2intlist=[int(i) for i in strlist] 3class s: 4 def __init__(self,x): 5 self.val=x 6 self.dic={} 7s(1).dic.setdefault(strlist[0],intlist[0]) 8s=sum(intlist) 9for i in range(1,4): 10 for j in (s(i).dic).keys(): 11 s(i+1).dic.setdefault(j+"+"+strlist[i],s(i).dic[j]+intlist[i]) 12 s(i+1).dic.setdefault(j+"-"+strlist[i],s(i).dic[j]+intlist[i]) 13for k,v in s(4).dic: 14 if v==7: 15 print(k) 16 break

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

タイトルが「AtCoderの切手問題」になっていますが、「切符問題」では?

クラスを定義するよりも関数を定義したほうが簡単な気がします。

Python

1s = list(input()) 2e = [ s[0], '', s[1], '', s[2], '', s[3], '=7' ] 3def f(i, n): 4 if i < 7: 5 e[i] = '+'; f(i + 2, n + int(e[i+1])) 6 e[i] = '-'; f(i + 2, n - int(e[i+1])) 7 elif n == 7: 8 print(''.join(e)) 9 exit() 10f(1, int(e[0]))

追記
別解

Python

1a = list(map(int, input())) 2def f(i): 3 if i < 4: 4 for j in range(2): 5 f(i + 1) 6 a[i] = -a[i] 7 elif sum(a) == 7: 8 print(f'{a[0]}{a[1]:+d}{a[2]:+d}{a[3]:+d}=7') 9 exit() 10f(1)

追記2
元のコードを生かしたコードです。

Python

1strlist = list(input()) 2intlist = [int(i) for i in strlist] 3 4class s: 5 def __init__(self, x): 6 self.val = x 7 self.dic = {} 8 9a = [s(1), s(2), s(3), s(4)] 10def s(i): return a[i-1] 11 12s(1).dic.setdefault(strlist[0], intlist[0]) 13for i in range(1, 4): 14 for j in s(i).dic: 15 s(i+1).dic.setdefault(j+"+"+strlist[i], s(i).dic[j]+intlist[i]) 16 s(i+1).dic.setdefault(j+"-"+strlist[i], s(i).dic[j]-intlist[i]) 17for k, v in s(4).dic.items(): 18 if v == 7: 19 print(k) 20 break

説明してほしいなら、コメントください。

追記3
「わかりました!」というコメントだったので、説明は不要なんですね。
質問のコードのどこが悪かったのかを本当に分かったのかどうか疑問ですが、
結局やりたかったことは次のようなことだったようです。

Python

1s = input() # string 2a = list(map(int, s)) # array of int 3d = [ {s[0]:a[0]}, {}, {}, {} ] # dict list 4for i in range(1, 4): 5 for k, v in d[i-1].items(): 6 d[i][k + '+' + s[i]] = v + a[i] 7 d[i][k + '-' + s[i]] = v - a[i] 8for k, v in d[3].items(): 9 if v == 7: 10 print(k + '=7') 11 break

タイトルが「切手問題」のままで、「切符の番号の問題」に修正されなかったことが残念です。

投稿2021/08/28 13:07

編集2021/09/06 11:57
kazuma-s

総合スコア8224

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ShinyaYAMAGUCHI

2021/09/06 11:08

ありがとうございます、わかりました!
guest

0

classの名前と変数が被っているからではないでしょうか

python

1s=sum(intlist) # ←ここで数値になっています。

投稿2021/08/28 08:38

TANAKAKazuyoshi

総合スコア96

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問