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

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

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

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

Python

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

Q&A

解決済

1回答

2352閲覧

リスト内でFraction(2,1)などが分数表示されない

dedede914

総合スコア63

Python 3.x

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

Python

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

0グッド

0クリップ

投稿2020/05/11 08:32

編集2020/05/11 16:01

前提・実現したいこと

行列の計算プログラムをつくっています
第一段階として、
対角成分を1にその左側を0にしようとしています
ex)
1,2,3,1  
4,5,6,2  
7,8,9,3

1,2,3,1
0,1,x,y
0,0,1,z
どこがおかしいのかわからないので一応全部のっけときます
まだ覚えていることが少ないので、えらく遠回りして書いているとは思いますが
できるだけこの方向性で完成させたいです

発生している問題・エラーメッセージ

計算は分数で進めたいのでfractionを使っています 求まったやつをprintするとfraction(数字,数字)で表示されてしまいます [[Fraction(1, 1), Fraction(2, 1), Fraction(1, 1), Fraction(1, 1)],... こんな感じになってしまいます

該当のソースコード

python

1def Eans(matriz): 2 from fractions import Fraction 3 mA=matriz 4 for i in range(0,len(mA[0])): 5 if mA[i][i]==0: 6 m=mA.pop(i) 7 mA.append(m)   #頭0やったら一番後ろに持ってく 8 for l in range(i,len(mA[0])): 9 s=mA[i][i] 10 mA[i][l] = Fraction(mA[i][l],s) #i行i列を1になるようi行を調整する 11 for k in range(i+1,len(mA)): 12 for l in range(i,len(mA[0])): 13 mA[k][l] -= mA[i][l] * mA[k][i] #i行以降の行のi列を0にするように引き算 14 return mA

試したこと

計算の仕方自体を色々いじってみたりしたんですが、解決しませんでした [[Fraction(1, 1), Fraction(2, 1), Fraction(1, 1), Fraction(1, 1)],... この表示のままです

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

python3.7です

リストにはintになるようにちゃんと数字いれてます

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

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

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

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

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

guest

回答1

0

ベストアンサー

python3

1print(m.append(Fraction(2,3)))

これはappendメソッドの戻り値をprintしているだけでは。
appendメソッドは何も値を返しません。

Fractionの値はちゃんと追加されていますよ。落ち着いてmをもう一度出力してみましょう。

python3

1m=[1,2,3] 2m.append(Fraction(2,3)) 3print(m) 4''' 5[1, 2, 3, Fraction(2, 3)] 6'''

追記

返信への補足です。結論から言うと何ら問題ありません。出力時の表現方法が違うだけです。
まずは以下のコードを確認してください。

python3

1ary = [Fraction(2,4),Fraction(2,3)] 2print(ary) 3# -> [Fraction(1, 2), Fraction(2, 3)] 4print(ary[0],ary[1]) 5# -> 1/2 2/3 6out = str(Fraction(2,4)) 7print(out) 8# -> 1/2 9out = repr(Fraction(2,4)) 10print(out) 11# -> Fraction(1, 2)

print関数は渡されたオブジェクトをstr関数で変換した結果を出力します。
print(Fraction(2,4))が"1/2"と出力されるのは、Fractionクラスがstr関数にかけられた際にどのように出力するかクラス内で定義してあるからです。
それに対し、配列(listクラス)を丸ごとstr関数で変換すると、個々の要素をrepr関数で変換した文字列を生成するようです。
repr関数で変換した結果が"Fraction(x, y)"となります。
str関数とrepr関数の違いについては質問の趣旨とは離れるのでご自分で調べてください。

投稿2020/05/11 08:44

編集2020/05/11 16:25
hope_mucci

総合スコア4447

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

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

dedede914

2020/05/11 15:55

回答ありがとうございます 確認も間違ってたみたいですね、ありがとうございます。 def Eans(): で定義した関数つかって計算してみてもその結果が [[Fraction(1, 1), Fraction(2, 1), Fraction(1, 1), Fraction(1, 1)],... という風になります どうしてでしょうか、、、
hope_mucci

2020/05/11 16:26

回答に追記しました。結論から言うと問題ないです。
dedede914

2020/05/11 16:38

わかりました!ありがとうございました!調べてみます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問