オブジェクトの位置は、オブジェクトがどのように印刷されるかです。厳密に言えば、リストの各要素の呼び出しstr
または呼び出し。デフォルトでは、オブジェクトは のようなものを返します。クラスにメソッドを定義することで、これをオーバーライドできます。ただし、これはあなたがここで望んでいるようには聞こえません。repr
list
repr
repr(team)
Teams
<main.Teams object at 0x02953230>
__repr__
Teams
TeamList
がTeams
オブジェクトのリストで、それをTeamName
メンバーのリストに変換したい場合は、 a を使用してlist comprehension
変換します。
TeamNameList = [team.TeamName for team in TeamList]
これはまだ正確に印刷したいわけではないことに注意してください。
>>> print TeamNameList
['North Carolina', 'South Carolina', 'West Carolina', 'East Carolina', 'Underground Carolina', 'Cloud-level Carolina', 'Past Carolina', 'Future Carolina'] # those are all states, right?
おそらく次のようなものが必要です。
>>> print ', '.join(TeamNameList)
North Carolina, South Carolina, West Carolina, East Carolina, Underground Carolina, Cloud-level Carolina, Past Carolina, Future Carolina
あなたのコメントから:
後の関数 simGame(teamA, Teamb) があります
インスタンスが表示されますが、2 番目の関数でそれらを呼び出す方法がわかりません。私は彼らを名前で呼ぶつもりでした。私が示した例では、North_carolina を後で (関数は示されていません) に渡すことができ、データに対して計算を実行できます。
私はあなたがここで何を望んでいるのか理解していると思います。ノースカロライナとサウスカロライナの間のゲームをシミュレートできるようにしたいのですが、手元にあるのはTeamList
.
これを行うには、おそらく次のように、名前をオブジェクトにdict
マッピングするを作成する必要があります。Teams
TeamDict = {team.TeamName: team for team in TeamList}
これで、次のようなことができます。
simGame(TeamDict['North Carolina'], TeamDict['South Carolina'])
次に、クラスsimGame
のノースカロライナとサウスカロライナのインスタンスを引数として取得するため、次のようなことができます。Teams
teamA
teamB
def simGame(teamA, teamB):
scoreA = int(teamA.FT * 1 * 20) + int(teamA.FG * 2 * 40) + int(teamA.Three * 3 * 10)
scoreB = int(teamB.FT * 1 * 20) + int(teamB.FG * 2 * 40) + int(teamB.Three * 3 * 10)
if scoreA > scoreB:
print 'Home team {} beats visitor {} by {}!'.format(teamA.TeamName,
teamB.TeamName,
scoreA - scoreB)
else:
print 'Visitors {} win by {} over {} at home!'.format(teamB.TeamName,
scoreB - scoreA,
teamA.TeamName)
それはあなたが望むものですか?
いくつかの追加コメント:
を使用してリスト内包表記と同じことを行うこともできます。これにより、2 回map
記述する必要がなくなりteam
ますが、通常の式構文を使用できないことも意味します。
TeamNameList = map(operator.attrgetter('TeamName'), TeamList)
または、map
と一緒に使用しlambda
て、式の構文を元に戻すこともできます...そして の繰り返しteam
:
TeamNameList = map(lambda team: team.teamName, TeamList)
しかし、このような場合、リスト内包表記は一般的に Pythonic な方法であると考えられています。(また、Python 3 に移行しても変化しませんが、aからイテレーターにmap
変化すると、次のような結果が得られますが、それでも機能します。)list
print TeamNameList
<builtins.map at 0x108022350>
', '.join(TeamNameList)
補足として、標準 (PEP 8) の Python スタイルでは、通常、クラスのみがこのように TitleCase になり、変数と属性は lower_case になります。CamelCase が本当に好きなら、lowerFirstCamelCase を使用することもできますが、TitleCase を使用すると、コードを読んでいる人が混乱し、TeamName
クラスが定義されている場所をすぐに見つけようとします。bvukelic からのコメントも参照してください。
別の補足として、あなたは多くの繰り返しコードを実行しているようですが、その理由はわかりません:
name = info[0]
FT = info[1]
FG = info[2]
Three = info[3]
newTeam = (name, FT, FG, Three)
にコピーinfo
しているだけですnewTeam
。再び使用されることのない中間変数をすべて追加するのはなぜですか?
newTeam2 = Teams(newTeam[0],newTeam[1],newTeam[2],newTeam[3])
そのすべてを次のように置き換えることができます。
newTeam2 = Teams(info[0],info[1],newTeam[2],newTeam[3])
あるいは:
newTeam2 = Teams(*info)
表示されていない別の変数が必要な場合は問題ありませんが、それでも必要ない可能性がありnewTeam
ます。これを行うだけです:
newTeam2 = Teams(name, FT, FG, Three)