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

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

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

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

Q&A

解決済

3回答

189閲覧

python3 条件演算子について

zeitaku_fire

総合スコア26

Python 3.x

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

0グッド

0クリップ

投稿2018/06/28 08:04

python

1taisyou = [ 1 if i =="!" else 10 if i == "?" else 0 if i == "+" else i for i in (list(input()))] 2print(taisyou) #[1, 10, 0, 1, 1, 10, 10, 0, 1, 1, 10, 10] 3print(sum(taisyou)) #55 4 5#入力データ !?+!!??+!!??

『概要』
入力データの内、
・! のときは、リストに1
・? のときは、リストに10
・+ のときは、リストに0
最後にsumを使って合計を出しています。

『質問』
入力データの内必要なのは、!と?だけです。
+については不要なので、無視したいのですが、やり方がわからず、ifをつかって仕方なく0を入れるようにしています。
今回に関して、不要なのは、+だけだったので、ifを書いて解決しましたが、今後不要な入力データが増えたとき、その数だけifを書くのは手間と思いました。
下記のようなことをやりたいのですが、いい方法はありますでしょうか?

python

1taisyou = [ 1 if i =="!" else 10 if i == "?" else i for i in (list(input()))] 2#!と?だけifでかく。ほかの入力データは不要。こんなコードにしたいが、これだと望んだ動きをしない。 3 4print(taisyou) #[1, 10, 1, 1, 10, 10, 1, 1, 10, 10] #希望する出力 5print(sum(taisyou)) #55 6 7#入力データ !?+!!??+!!??

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

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

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

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

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

yohhoy

2018/06/28 08:15

リスト内包表記([~])だけで完結させたいということでしょうか?あまりに複雑な条件の場合、素直にメソッドを作ったほうが良いと思いますが、制約がありますか?
guest

回答3

0

変換元の文字数が1文字限定ならstr.maketransが使えるかと。

Python

1s = input() 2table = str.maketrans({ 3 '!': '1 ', 4 '?': '10 ', 5 '+': ' ', 6}) 7result = s.translate(table) 8ar = list(map(int, result.strip().split())) 9print(ar) 10print(sum(ar))

◇参考情報
str.maketrans

投稿2018/06/28 09:05

umyu

総合スコア5846

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

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

0

ベストアンサー

[ 1 if i =="!" else 10 if i == "?" else i for i in (list(input())) if i == "!" or i == "?"]

投稿2018/06/28 08:20

Kentaro0919

総合スコア258

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

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

zeitaku_fire

2018/06/28 08:33

ありがとうございます。末尾に対象を記載(今回では、!と?)することで、ほかは無視されるコードと解釈しました。今後ともよろしくお願いします。
guest

0

細かいところですが、(list(input()))の外側のlistとかっこ不要かな・・・単にinput()でいいはず。

ということで、こんな感じでどうですか。
その他ならiにするという規定がなければ、条件演算子をもう1つ減らせます。

python

1s = "!?+!!??+!!??" 2taisyou = [1 if i =="!" else 10 if i == "?" else i 3 for i in s 4 if i != "+"] 5print(taisyou) 6print(sum(taisyou))

でも、そもそも条件演算子で書くのは悪夢なので、

python

1s = "!?+!!??+!!??" 2conv_dict = {"!":1, "?":10} 3taisyou = [conv_dict.get(i, i) # get(i, i)でまずconv_dict[i]を試み、存在しなければiを返す 4 for i in s 5 if i != "+"] 6print(taisyou) 7print(sum(taisyou))

さらに、除外したいものが複数ある場合、

python

1s = "!?+!-!??-+!-!??" 2conv_dict = {"!":1, "?":10} 3exc_set = {"+", "-"} 4taisyou = [conv_dict.get(i, i) 5 for i in s 6 if i not in exc_set] 7print(taisyou) 8print(sum(taisyou))

投稿2018/06/28 08:17

編集2018/06/28 08:23
hayataka2049

総合スコア30933

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

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

zeitaku_fire

2018/06/28 08:30

>>細かいところですが、(list(input()))の外側のlistとかっこ不要かな・・・単にinput()でいいはず。 ありがとうございます。inputだけだと、一行まるまる取り込まれると勘違いしておりました。。 ご指摘のとおり不要でした。削除しておきます。 また、辞書を使ってやる方法について、ご教授いただきありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問