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

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

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

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

Q&A

解決済

1回答

1003閲覧

Python 標準入力で2桁以上の整数・マイナスの値が入ると結果が出ない

Sayo16

総合スコア1

Python

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

0グッド

0クリップ

投稿2022/06/03 14:19

前提

Pythonで整数を入力して最後に入力した値より大きい値の個数を最後に表示したいのですが、標準入力で100や-2などの値を入力するとエラーが出ます。
1桁の整数は問題なく実行できます。
13行目のリストの中を数値型にするという部分が原因かもしれないと考えております。
初心者なので基礎がなっていないと思われるかもしれませんが、どのように改善したらよいか丁寧に説明してくださると嬉しいです。

Python

1c=0 2lst=[0,0,0,0,0,0,0,0,0,0] 3lst1=[] 4for i in range(1,11): 5 lst1+=input(str(i)+'個目の整数を入力してください:') 6 lst=lst1 7lst=[int(j) for j in lst] 8b=lst[9] 9for a in lst: 10 if a>b: 11 c=c+1 12print(c)

実現したいこと

lstに直接入れずに別の変数に入れ、変数をlstに入れたい
そうなると空リストは必要なのか。
(for文にlst[1]=lst1を入れていきたいのですが、その際にlst1を数字型に置き換える方法がわからない)
現状lstがほぼ機能していない

### 発生している問題・エラーメッセージ 標準入力で2桁以上、マイナスの値を入れるとエラーメッセージが出る。

エラーメッセージ

lst=[int(j) for j in lst] ValueError: invalid literal for int() with base 10: '-'

試したこと

for文の中の12行目をlst[0]=int(lst[0]),lst[0]=lst0のようにしてみたが、'str' object does not support item assignmentというエラーが出る。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

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

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

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

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

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

guest

回答1

0

ベストアンサー

以下の処理で意図しない動作をしていると思います。

python

1c=0 2lst=[0,0,0,0,0,0,0,0,0,0] 3lst1=[] 4for i in range(1,11): 5 lst1+=input(str(i)+'個目の整数を入力してください:') # ★ 6 lst=lst1

★のところです。lst1 はリストです。lst1 += xxx という書き方は、 lst1 = lst1 + xxx と同等でリストの加算を表わします。リストの加算ではリストとリストの内容をつなぎあわせます。
さて、pythonでは文字列は文字のリストという性質も持っています。
たいうことで、ここで、リストに文字列を加算するとどうなるかと言うと、たとえば、

[] + "12" = [] + ["1", "2"] = ["1", "2"]
["1", "2"] + "-4" = ["1", "2"] + ["-", "4"] = ["1", "2", "-", "4"]
のようになってしまうのです。
なので、後で、複数桁の値が入れられなかったり、質問のようなエラーが出るのです。

リストに 要素を足す場合は、appendメソッドを使います。

python

1lst1=[] 2for i in range(1,11): 3 lst1.append(input(str(i)+'個目の整数を入力してください:'))

これで、list1 に入力しした文字列がリストとて入ります。

もしlstに入れたいのであれば、

python

1c=0 2lst=[0,0,0,0,0,0,0,0,0,0] 3for i in range(1,11): 4 lst[i] = input(str(i)+'個目の整数を入力してください:')

これで、 lstに入力しした文字列がリストとて入ります。

以降の処理はいいと思いますが、処理対象が入っているのが、lst1 なのか lstなのか気をつける必用があります。

投稿2022/06/03 15:06

TakaiY

総合スコア14349

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

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

Sayo16

2022/06/03 16:23

回答ありがとうございます。 自分ではどこを直せば良いか分からなかったので、 TakaiY様の分かりやすい説明で納得しました。 また、私自身もっと基礎知識をつけなければならないと痛感致しました。ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.31%

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

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

質問する

関連した質問