Kenta-K
@Kenta-K

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

服屋のセール販売

解決したいこと

レベルアップ問題
https://paiza.jp/works/mondai/forest_contest_002/forest_contest_002__c_sale/edit?language_uid=python3

ある服屋さんはpantsの在庫を抱えてしまったため、以下のようなセールを行う。
・pantsを一点以上買っていて、かつ
・2000円以上お買い上げの方は合計金額から500円引き。
例)
4
shirt 500
pants 1000
pants 500
shoes 2000
のとき3500

※ズボン(pants)を1点以上購入および2000円以上の買い物なので500円引き

3
shirt 1000
shoes 2000
shirt 500
のとき3500

あるお客さんの購入アイテムが入力されるので、セール割引を適用した合計金額を出力する。

発生している問題・エラー

出ているエラーメッセージを入力

Traceback (most recent call last):
  File "Main.py", line 13, in <module>
    print(sum(total)) # pantsが入力されない場合はそのままの合計金額
TypeError: unsupported operand type(s) for +: 'int' and 'str'

該当するソースコード

# coding: utf-8

import math # sumを使うため

n = int(input()) # 購入アイテム数
c,p = input().split()
total = []
total.append(p) # 空リストに価格を追加
for _ in range(n):
    if "pants" in c and p >= 2000: # pantsが入力された場合 または 会計合計金額が2000円以上
        print(int(total) - 500) # 会計合計金額から500円割引
    else:
        print(sum(total)) # pantsが入力されない場合はそのままの合計金額

教えてください よろしくお願いします!

0

3Answer

c,p = input().split()

この時点の c と p は文字列です。

total.append(p) # 空リストに価格を追加

total に append される p は 文字列です。

print(sum(total))

この sum では、数値同士を加算して合計を求めようとしますが、totalには文字列が含まれるためエラーになっています。
totalにはintに変換した数値をappendしましょう。

あと、totalには複数の値がappendされると思いますが、それが行われていませんね。
"pants" in c もおかしな比較です。

>>> 'pants' in 'shirt'
False
>>> 'pants' in 'pants'
True
>>> 'pants' in 'longpants'
True
>>> 'pants' == 'longpants'
False

最初の入力例の場合、

n = int(input()) # 購入アイテム数

n = 4

が代入され、

c,p = input().split()

で 2行目の shirt 500 が空白で分轄され、

c = 'shirt'
p = '500'

が代入されます。

1Like

Comments

  1. @Kenta-K

    Questioner

    空リストにはint型で追加してみました
    pantsが入力されたときなので ==で
    4つの商品の場合で試したら今度は最初の500しか読み込んでないみたいで
    それもなぜかsumの合計処理が正しく動いてない感じなんです
  2. > 4つの商品の場合で試したら今度は最初の500しか読み込んでないみたいで

    1回しかappendしていないのでそうなりますよ。
    ループの中でinputとappendをする必要がありそうですよ。
  3. @Kenta-K

    Questioner

    ループ内で・・・ がんばってみます
# coding: utf-8

import math # sumを使うため

n = int(input()) # 購入アイテム数
c,p = input().split()
total = []
for i in range(1,n):
    for j in range(1,n):
        total.append(int(p[0]))
        total.append(int(p[1]))


    print(total)

'''
# cにpantsが入力された場合 または 会計合計金額が2000円以上
        if c == "pants" and p >= 2000: # 会計合計金額から500円割引
            print(sum(total)-500)
        else:
            print(sum(total)) # pantsが入力されない場合はそのままの合計金額
'''

どうしても 最初の要素500しか追加できません 500,1000と追加するつもりで
インデックスで要素を指定したらどうかと思ったのですが 500が5,0,0などと分解されてしまい

0Like

とりあえず割引は無視して合計を求めるのはどうでしょうか
わかりやすくするため、読み込み部分は、関数にしています
以下のプログラムは、読み込んで表示するだけです

def read_total_count():
    return int(input())

def read_item():
    category, kakaku = input().split()
    return category, int(kakaku)

total_count = read_total_count()
print(">> total count: ", total_count)
for i in range(total_count):
    category, kakaku = read_item()
    print(">> category: ", category, "kakaku:", kakaku)

私だと大まかな処理の流れは以下のようになると思います

0Like

Comments

  1. @Kenta-K

    Questioner

    丁寧にフローチャートまで、ありがとうございます!

Your answer might help someone💌