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

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

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

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

Q&A

解決済

2回答

4943閲覧

Python3 特定の数字が含まれる文字型の数字を抽出する方法  find()の使い方

python3_beginer

総合スコア46

Python 3.x

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

0グッド

0クリップ

投稿2018/04/16 06:06

問題)

服屋のポイント総額を計算したい。
ポイント付加のルールは以下の3つのルールに従う。

  1. 通常は購入金額の 1 %(小数点以下切り捨て)とする
  2. ただし、5 のつく日は購入金額の 5 %(小数点以下切り捨て)とする
  3. ただし、7 のつく日は購入金額の 7 %(小数点以下切り捨て)とする

N    #各レシートの数
d_1 p_1 #1枚目のレシートの日付 d_1 日, 購入金額 p_1 円
d_2 p_2 #2枚目のレシートの日付 d_2 日, 購入金額 p_2 円
...
d_N p_N #N枚目のレシートの日付 d_N 日, 購入金額 p_N 円

じょうk
・ 1 ≦ N ≦ 1000 (レシートの数)
・ 1 ≦ d_i ≦ 31 (i番目のレシートが発行された日付)
・ 1 ≦ p_i ≦ 10000 (i番目のレシートの購入金額)

入力例1
3
1 1024
11 2048
21 4196

出力例1
71

#正常なコード

コード N = int(input()) data = [ list(map(str,input().split())) for _ in range(N) ] days, price = zip(*data) price = list(map(int,price)) total_point = 0 #特定の数字を含む、文字型の数字を抽出 for k,v in zip(days, price): if '5' in k: point = v * 5//100 elif '7' in k: point = v * 7//100 else: point = v * 1//100 total_point += point print(total_point)

#不備のあるコード

特定の数字を含む、文字型の数字を抽出する際に、find()を利用したが、うまく機能しない。
ただし、エラーなどの表示はない

原因がお分かりの方がいらっしゃたら教えて頂きたいです。

コード N = int(input()) data = [ list(map(str,input().split())) for _ in range(N) ] days, price = zip(*data) price = list(map(int,price)) total_point = 0 #特定の数字を含む、文字型の数字を抽出 for k,v in zip(days, price): if k.find('5'): point = v * 5//100 elif k.find('7'): point = v * 7//100 else: point = v * 1//100 total_point += point print(total_point)

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

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

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

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

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

guest

回答2

0

ベストアンサー

x in stringと同等な条件が書きたいならstring.find(x) >= 0が正しいです。
ただ、わざわざこのように書くメリットはまずありません。

ここらへんの話はドキュメントに記載されています。Python 標準ライブラリ » 組み込み型

投稿2018/04/16 06:10

編集2018/04/16 06:13
LouiS0616

総合スコア35658

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

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

0

str.find()は一致した文字列の場所を返すメソッドです。一致しなければ-1を返します。

python

1>>> [(c, "hoge".find(c)) for c in "fuga"] 2[('f', -1), ('u', -1), ('g', 2), ('a', -1)]

次に数字をifの条件に書いた場合の挙動ですが、次のようになります。

python

1>>> [(x-5, True) if x-5 else (x-5, False) for x in range(10)] 2[(-5, True), (-4, True), (-3, True), (-2, True), (-1, True), (0, False), (1, True), (2, True), (3, True), (4, True)]

0以外はTrueとみなされます。ここは厳密に型を見てboolean以外では例外を吐いてくれたら嬉しいところなのですが、pythonの言語仕様がそうなっていないので仕方ありません。
なので、質問文のコードは例外は出ないけど意図通り動かない、ロジックエラーのコードになっています。

投稿2018/04/16 06:29

hayataka2049

総合スコア30933

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問