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

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

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

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

Q&A

解決済

2回答

177閲覧

与えられたデータをクラスにしたい

h_proc

総合スコア68

Python

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

0グッド

0クリップ

投稿2019/07/11 08:47

編集2019/07/11 14:08

ファイルからデータを読み取り、リストに格納しました。それを、クラスにして、呼び出せるようにしたいのです。関数を使わないでmain関数の中では、クラスとして呼び出せました。表示用に作った関数を使って表示させたいのですが、関数の引数に何を代入したらよいかが分かりません。
コードは以下のようです。どうぞよろしくお願いいたします。

python

1class Player: 2 def __init__(self,key,name,profile): 3 self.key = key 4 self.name = name 5 self.profile = profile 6 7data =[] 8f = open('zac_japan.txt','r',encoding = 'utf-8') 9data = f.readlines() 10f.close 11 12def print_player(d):#この関数を使いたい 13 n = len(d) 14 for i in range(n): 15 print("{:d},{:s},{:s}".format(int(d[i].key),d[i].name,d[i].profile),end="") 16 print("") 17 18data2 = [] 19data3=[] 20 21for n in data: 22 data2 = (n.split()) 23 data3 = (Player(data2[0],data2[1],data2[2])) 24 print(data3.key,data3.name,data3.profile)#これで関数を使わないで表示させることはできる 25

疑問点
print(data2[0]),print(data2[1]),print(data2[2])はそれぞれ正しく表示されるが、
data3 =[]
というリストを用意して、そこに
data2.append(Player(data2[0],data2[1],data2[2]))
として追加させたところ、
<main.Player object at 0012....
が追加されていました。どうしてこのように変換されてしまうのでしょうか。解決策を教えていただきたいです。

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

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

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

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

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

Lhankor_Mhy

2019/07/11 08:52

インスタンスにしたい、ということでいいんですよね? 『上手くいきません』とは具体的には何が起きていますか?
h_proc

2019/07/11 12:29

作った関数の引数にdata2を入れると、keyの値が定義されていないと表示されます。
Lhankor_Mhy

2019/07/12 02:46

> data2.append(Player(data2[0],data2[1],data2[2])) として追加させたところ、 これは、data3.append(...) ということですか?
guest

回答2

0

Python

1class Player: 2 def __init__(self, key, name, profile): 3 self.key = key 4 self.name = name 5 self.profile = profile 6 7def print_player(players): 8 for player in players: 9 print("{:d},{:s},{:s} ".format(player.key, player.name, player.profile), end = "") 10 print() 11 12f = open('zac_japan.txt','r', encoding = 'utf-8') 13lines = f.readlines() 14f.close 15 16players = [] 17for line in lines: 18 data = line.split() 19 players.append(Player(int(data[0]), data[1], data[2])) 20 21print_player(players)

zac_japan.txt

text:

11 abc ABC 22 def DEF 33 ghi GHI

実行結果

text:

11,abc,ABC 2,def,DEF 3,ghi,GHI

こんなことがしたいのでしょうか?
それなら、上記のプログラムで、分からないところを質問に追記してください。

違う場合は、もっと具体的にどんなことがしたいのかを
入力ファイルの内容や、期待する表示内容を提示して質問に追記してください。
###追記

print("{:d},{:s},{:s} ".format(player.key, player.name, player.profile), end = "")

int を :d で表示するのは当たり前、str を :s で表示するのは当たり前だから、
print("{},{},{} ".format(player.key, player.name, player.profile), end = "")

さらに、"...".format(...) の代わりに f"..." を使うと、
print(f"{player.key},{player.name},{player.profile} ", end = "")

投稿2019/07/11 10:37

編集2019/07/11 10:57
kazuma-s

総合スコア8224

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

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

h_proc

2019/07/11 12:31

zac_japan.txtに入っているデータを.keyや.nameやを使って取り出したいです。
kazuma-s

2019/07/11 13:20

zac_japan.txt にはどんなデータが入っているんですか? 私のプログラムはそのデータを読み込んで、Playerクラスのインスタンスに入れています。 その後、それを取り出して表示しています。 .key や .name を使っています。何が不満なんですか?
h_proc

2019/07/11 13:26

選手の背番号、名前、所属チームが一行に書かれたデータが8人分入っています。各情報を空白で区切って、リストの0番目、1番目、2番目と指定できるようにしましたが、上手くいきませんでした。おそらくPlayerクラスのインスタンスへの入れ方が上手くいっていないと思います。何度も申し訳ございません。
kazuma-s

2019/07/11 14:43

私が回答に書いたように、zac_japan.txt の内容を質問に追加してください。 私が回答に実行結果を書いたように、あなたの期待する表示結果を質問に追加してください。 あなたの書いたプログラムで上手く行かないかないようですが、 私が書いたプログラムでも上手く行かないのですか? 私のプログラムは理解できないので無視ですか? 詳しく解説しますので、どこが分からないのか教えてください。 あるいは、あなたのプログラムがどのように動いているのか詳しく説明しましょうか?
guest

0

ベストアンサー

いつの間にかソースコードが変更されていますね。

相変わらず、data =[]、data2 = []、data3=[] は無意味ですね。

data = f.readline() で別のリストに置き換えられています。
data2 = (n.split()) で別のリストに置き換えられています。
data3 = (Player(data2[0],data2[1],data2[2])) で
Playerオブジェクトに置き換えられています。

疑問点

print(data2[0]),print(data2[1]),print(data2[2])はそれぞれ正しく表示されるが、

それは data2 = (n.split()) の直後ですね。

data3 =[]

というリストを用意して、そこに
data2.append(Player(data2[0],data2[1],data2[2]))
として追加させたところ、

data3.append(Player(data2[0],data2[1],data2[2])) ではないのですか?

<main.Player object at 0012....

が追加されていました。どうしてこのように変換されてしまうのでしょうか。

なにを print したのですか?

解決策を教えていただきたいです。

次の 2つのコードはどちらが参考になりますか?

その1

Python

1class Player: 2 def __init__(self,key,name,profile): 3 self.key = key 4 self.name = name 5 self.profile = profile 6 7f = open('zac_japan.txt','r',encoding = 'utf-8') 8data = f.readlines() 9f.close 10 11data3 = [] 12 13for n in data: 14 data2 = n.split() 15 data3.append(Player(data2[0],data2[1],data2[2])) 16 17for n in data3: 18 print(n.key,n.name,n.profile)

その2

Python

1class Player: 2 def __init__(self,key,name,profile): 3 self.key = key 4 self.name = name 5 self.profile = profile 6 7f = open('zac_japan.txt','r',encoding = 'utf-8') 8data = f.readlines() 9f.close 10 11def print_player(d):#この関数を使いたい 12 n = len(d) 13 for i in range(n): 14 print("{:d},{:s},{:s} ".format(int(d[i].key),d[i].name,d[i].profile),end="") 15 print("") 16 17data3 = [] 18 19for n in data: 20 data2 = n.split() 21 data3.append(Player(data2[0],data2[1],data2[2])) 22 23print_player(data3)

投稿2019/07/11 17:38

kazuma-s

総合スコア8224

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問