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

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

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

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

Python

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

Q&A

解決済

4回答

2245閲覧

Python str型とint型が混ざった標準入力の扱い方

Justin04

総合スコア11

Python 3.x

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

Python

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

0グッド

0クリップ

投稿2020/06/10 07:35

Pythonのintとstrが混ざった標準入力の扱いについての質問です。

標準入力として
N(生徒数)
t(文系/理系), e(英語), m(数学), s(理科)

として、

3
bunkei 90 70 40

のように数値が入力されるとします。

文系は3教科計210点かつ英語80点
理系は3教科計210点かつ数学80点
で合格し、最後に合格者数を出力するプログラムを書いています。

tをstr型、e, m, sをint型として扱いたいのですが、
力技で下記のように書くしか思いつきませんでした。

この場合標準入力をよりうまく扱う方法はあるでしょうか?
教えていただければと思います。

Python

1#生徒数 2N = int(input()) 3 4#合格者数 5accept = 0 6 7#文系、理系それぞれに点数の基準を設け、合格ならacceptに1を加える 8for i in range(N): 9 t, e, m, s = input().split() 10 if t == "bunkei" and int(e)+int(m)+int(s) >= 210 and int(e) >= 80: 11 accept += 1 12 elif t == "rikei" and int(e)+int(m)+int(s) >= 210 and int(m) >= 80: 13 accept += 1 14 15print(accept)

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

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

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

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

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

guest

回答4

0

ベストアンサー

あんまり奇麗じゃないですけど、比較的ましな方法です。

Python

1t, *scores = input().split() 2e, m, s = map(int, scores)

投稿2020/06/10 08:03

LouiS0616

総合スコア35668

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

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

Justin04

2020/06/10 08:24

すみません、いつもありがとうございます。 scoreに一旦入れてからint型に変換すれば良いのですね!
guest

0

9行目を、

python3

1t, e, m, s = [int(v) if i > 0 else v for i,v in enumerate(input().split())] 2 3print(*(map(lambda x : x * 4, [t, e, m, s]))) 4''' 5入力例 65 6 7 8 7出力 85555 24 28 32 9'''

python3

1N = int(input()) 2l = [[int(v) if i > 0 else v for i,v in enumerate(input().split())] for h in range(N)] 3acpt = 0 4for t,e,m,s in l: 5 if e + m + s >= 210: 6 if (t == "bunkei" and e >= 80) or (t == "rikei" and m >= 80): 7 acpt += 1 8print(acpt)

投稿2022/02/08 07:41

編集2022/02/08 07:55
kutta

総合スコア4

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

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

0

コードは長くなってますが、合格判定を関数に分離してみた例を示します。
入力データの解析 (文字列のままにする項目、数字にする項目の処理もそこで行っています)

pythopn3

1def hantei(info): 2 kind = info[0] 3 scores = [int(x) for x in info[1::]] 4 5 total = sum(scores) 6 if kind == "bunkei": 7 key_score = scores[0] # 英語 8 elif kind == 'rikei': 9 key_score = scores[1] # 数学 10 11 return total >= 210 and key_score >= 80 12 13 14N = int(input()) 15infos = [] 16for i in range(N): 17 infos.append(input().split()) 18 19hanteis = [hantei(x) for x in infos] 20print(hanteis.count(True))

投稿2020/06/14 08:34

katoy

総合スコア22324

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

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

0

一旦その行全体を文字列として取り込みます
それをスペース区切りで分解して、あとは文字列で使うなり整数変換して使うなりすればよろしい

投稿2020/06/10 07:42

y_waiwai

総合スコア88042

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

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

LouiS0616

2020/06/10 08:04

質問のコードの意味分かってますか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問