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

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

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

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

Q&A

解決済

3回答

1047閲覧

Python3 リストの文字列 特定の文字のみカウント

python3_beginer

総合スコア46

Python 3.x

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

0グッド

0クリップ

投稿2018/04/09 04:20

目標)
筋トレアプリをつくりたい
バーベルを持ち上げた回数を記録する
1セット終わるごとに、インターバルを設ける
その都度、限界まで続けるため、1セットごとの持ち上げる回数は不特定
その日の合計の回数を求める

更に、回数の記録方法は数字を利用しない

連続する "a" の数が整数の 10 の位を表し、
それに続く連続する "b" の数が整数の 1 の位を表す
"+" は足し算の記号を表す

入力例1
bbb+bbbb

bが3つ → 3
bが4つ → 4

出力例1
7

入力例2
abbbbbbb+aaab+bbbb

aが1つ、bが7つ →17
aが3つ、bが1つ →31
aが0つ

出力例2
52

目標)
筋トレアプリをつくりたい
バーベルを持ち上げた回数を記録する
1セット終わるごとに、インターバルを設ける
その都度、限界まで続けるため、1セットごとの持ち上げる回数は不特定
その日の合計の回数を求める

更に、回数の記録方法は数字を利用しない

連続する "a" の数が整数の 10 の位を表し、
それに続く連続する "b" の数が整数の 1 の位を表す
"+" は足し算の記号を表す

入力例1
bbb+bbbb

bが3つ → 3
bが4つ → 4
合計 7

出力例1
7

入力例2
abbbbbbb+aaab+bbbb

aが1つ、bが7つ →17
aが3つ、bが1つ →31
aが0つ、bが4つ → 4
合計 52

出力例2
52

課題)
a,bの数の合計を数えるため count()を利用する
全体のデータから10の位の数字があるもの、ないものに分ける
ループを利用することで、期待値を取得

コード data = input().split('+') result = [] for x in data: ten_place_count = x.count('a') one_place_count = x.count('b') if ten_place_count > 0: for ten, one in zip(ten_place_count, one_place_count): result.append(ten,one) else: result.append(one_place_count) #print(result) total = 0 for x in result: total += x print(total)

更に、上記のコードをlambda式でif処理を利用し書きなおしたい。
しかし、全体のデータを10の位があるグループとないグループに分けた後にif処理を導入できない。
アドバイス宜しくお願い致します。

コード ten_place = list(map(lambda x: 'a' in data, data)) print(ten_place) one_place = list(map(lambda x: 'a' not in data, data)) print(one_place)

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

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

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

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

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

guest

回答3

0

課題はおいといて、目標を満たすには単純に以下でよいと思います。

Python

1s = input() 2print( 10 * s.count('a') + s.count('b'))

投稿2018/04/09 04:35

can110

総合スコア38262

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

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

python3_beginer

2018/04/09 09:59

お返事ありがとうございます。 仰る通り簡単な問題でしたね。笑 ありがとうございました。
guest

0

足し算しかしないなら、単に数えれば良いだけのような。

Python

1data = input() 2total = 10 * data.count('a') + data.count('b') 3 4print(total)

Wandbox

投稿2018/04/09 04:31

LouiS0616

総合スコア35660

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

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

hayataka2049

2018/04/09 04:33

確かに、splitする必要すらないですね。
python3_beginer

2018/04/09 09:59

お返事頂きありがとうございます。 ただ数えるだけでしたね。笑 なぜこんなに難しく考えていたのか自分でも恥ずかしいです。 ありがとうございました。
guest

0

ベストアンサー

難しく考えすぎなのではないでしょうか。下のようなコードで用を達しますよ。

python

1def convert(string): 2 ten_count = string.count("a") 3 one_count = string.count("b") 4 return ten_count*10 + one_count 5 6data = input().split('+') 7 8print(sum([convert(x) for x in data]))

追記

ついでに課題のプログラムにツッコミ入れておくと、

python

1for ten, one in zip(ten_place_count, one_place_count): 2 result.append(ten,one)

ここは
TypeError: zip argument #1 must support iteration

TypeError: append() takes exactly one argument (2 given)
が出るんじゃないかなぁと思うのですが。そしてresultを(正しく作れたとして)単純にぜんぶ加算したら、意図したのとは違う数字になるのでは? 10の位に対して適切な処理をしていない訳ですから。

投稿2018/04/09 04:31

編集2018/04/09 04:41
hayataka2049

総合スコア30933

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

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

python3_beginer

2018/04/09 10:01

お返事頂きありがとうございます。 count()で簡単にできましたね、ありがとうございました。 また、追記でプログラムに関して訂正して頂きありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問