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

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

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

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

Q&A

解決済

2回答

297閲覧

python3.7 条件式が動作しない、リストをint型にできない

aufheben

総合スコア24

Python 3.x

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

0グッド

0クリップ

投稿2018/03/05 12:15

lang

1print("input the size of square matrix (1,4,9)") 2SIZE = input() 3SIZE = int(SIZE) 4if SIZE != 1 or SIZE != 4 or SIZE !=9: 5 print("not correct") 6 exit() 7 8print("enter the elements of Square matrix\n") 9elm=[] 10for i in range(SIZE): 11 elm.append(input()) 12 13list(map(int, elm)) 14 15if SIZE == 1: 16 print("det is " + elm[0]) 17 18elif SIZE == 4: 19 print ("det is " + elm[0]*elm[3]-elm[1]*elm[2]) 20 21else: 22 print("det is " + elm[0]*elm[4]*elm[8]+elm[1]*elm[5]*elm[6]+elm[2]*elm[3]*elm[7]-elm[2]*elm[5]*elm[6]-elm[1]*elm[3]*elm[8]-elm[0]*elm[5]*elm[7]) 23 24input()

python初心者です。
上記のコードで実行すると1,4,9を入力しても1個目のif文に引っかかってしまいます。
if文をとばして実行しても4,9の場合でstrは掛け算できないと表示されます。
色々調べてみてlist(map())の文にたどり着いたのですがやってみても変わりませんでした。
詳しい方いらっしゃたらご教授お願いいたします。

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

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

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

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

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

guest

回答2

0

ベストアンサー

SIZE != 1 or SIZE != 4 or SIZE !=9
**『1ではない、あるいは4ではない、あるいは9ではない』**ことは常に成立します。

Pythonicに書くならnot SIZE in (1, 4, 9)じゃないかなぁ。

if文をとばして実行しても4,9の場合でstrは掛け算できないと表示されます。

これって行列式を計算しようとしているんでしょうか?
numpyを使った方が楽だと思いますが...

まぁ、原因としては

Python

elm=[]
for i in range(SIZE):
elm.append(input())

elmの各要素が文字列だからですね。

list(map(int, elm))で確かにそれぞれの要素をint型にキャスト出来ますが、
その結果を受け取らなければ意味がないです。(dkato0077さん、ご指摘ありがとうございます。)

書いてみた

Python

1from math import sqrt 2import numpy as np 3 4def main(): 5 # 6 SIZE = int( 7 input('Input the size of square matrix (1,4,9): ') 8 ) 9 SIDE = sqrt(SIZE) 10 11 if not SIDE.is_integer(): 12 print('Input size is invalid.') 13 return 14 15 SIDE = int(SIDE) 16 17 # 18 print('Enter each elements of Square matrix') 19 mat = np.array([ 20 [int(input()) for _ in range(SIDE)] for _ in range(SIDE) 21 ]) 22 print(mat) 23 24 # 25 det = np.linalg.det(mat) 26 print(f'Det is {int(det)}.') 27 28 29if __name__ == '__main__': 30 main()

入出力例1

plain

1Input the size of square matrix (1,4,9): 4 2Enter each elements of Square matrix 31 42 53 64 7[[1 2] 8 [3 4]] 9Det is -2.

入出力例2

plain

1Input the size of square matrix (1,4,9): 3 2Input size is invalid.

投稿2018/03/05 12:20

編集2018/03/05 13:14
LouiS0616

総合スコア35660

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

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

退会済みユーザー

退会済みユーザー

2018/03/05 12:26

strの掛け算はlist(map(int, SIZE))で解決してるように見せかけてどこにも代入していないという。
LouiS0616

2018/03/05 12:28

ああ、ほんとですね。そっちを見逃していました。
KSwordOfHaste

2018/03/05 12:37

to: 質問者さんへ どの言語かに関係なく、「ド・モルガンの法則」というのを覚えておくとよいと思います。「A or B」の逆は「!A and !B」になるというやつです。 もっともLouiS0616さん回答にあるようにnot size in (1,4,9)の方がそうしたケアレスミスを起こしにくい「直感的にわかりやすい論理」と思います。わかりやすい論理が一番ですね・・・
guest

0

質問内容を読み間違えました。

"1,4,9"という文字列をコンマで分けて、それぞれの要素をintにキャストしなくちゃダメっす。

投稿2018/03/05 12:21

編集2018/03/05 13:15
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問