0

文字列と分割を使用して、リスト内の 3 人のうち特定の人物の 3 つの異なる等級から特定の等級を取得するにはどうすればよいでしょうか。これがリストです。Justin:Calculus$90:Java$85:Python$88: Taylor:Calculus$73:Java$95:Python$86: Drew:Calculus$80:Java$75:Python$94: 私は現在これで行き詰まっています。私が見つけることができる最良の例はこれでした。

def phonebook():
  return """
Mary:893-0234:Realtor:
Fred:897-2033:Boulder crusher:
Barney:234-2342:Professional bowler:"""

def phones():
  phones = phonebook()
  phonelist = phones.split('\n')
  newphonelist = []
  for list in phonelist:
    newphonelist = newphonelist + [list.split(":")]
  return newphonelist
def findPhone(person):
  for people in phones():
    if people[0] == person:
      print "Phone number for",person,"is",people[1]

ご覧のように。これの問題は、電話番号とその役職の両方しか返さないことです。私がする必要があったのは、クラスの名前と学年のみを、2 つの入力 (名前、科目) のみを持つクラスと共に返すことでした。これが私がこれまでに持っているものです。

def scoreList():
 return"""
  Justin:Calculus$90:Java$85:Python$88:
  Taylor:Calculus$73:Java$95:Python$86:
  Drew:Calculus$80:Java$75:Python$94:"""
def scores():
  scores=scoreList()
  scorelist=scores.split('\n')
  newscorelist=[]
  for list in scorelist:
   newscorelist=newscorelist + [list.split(":")]
   scores.split('$')
  return newscorelist
def findScore(student,subject):
  for people in scores():
   for subject in scores():
    if people[0]==student:
     if subject[0]==subject:
      print (student,"got",score,"of the course",subject[1])

はい、私はこれについて初心者です。私は何日もこれを行う方法を探していました。

4

1 に答える 1

0

辞書の辞書を使用することをお勧めします。

最初に辞書を作成します

students = {}

行ごとに生徒を作成します

for studentdata in scores.split('\n'):
    data = studentdata.split(':')
    name = data[0]
    students[name] = {}

各クラスを学生辞書のキーとして追加します

for class_data in data[1:]:
    if class_data:
        class_name,class_score = class_data.split('$')
        students[name][class_name] = class_score

すべてをまとめると、次のようになります。

students = {}
for studentdata in scores.split('\n'):
    data = studentdata.split(':')
    name = data[0]
    students[name] = {}
    for class_data in data[1:]:
        if class_data:
            class_name,class_score = class_data.split('$')
            students[name][class_name] = class_score

学生は辞書の辞書になりました。現在、学生に関連するスコアを検索するにfindScoreは:

def findScore(student,subject):
    print "student %s got %s of the course %s" % (student,students[student][subject],subject)

Student と Subject が辞書にあるとは限りません。そうでない場合、エラーが発生します。これを防ぐには、そのキーが辞書にあるかどうかを確認します。

def findScore(student,subject):
    if student in students:
        if subject in students[student]:
            print "student %s got %s of the course %s" % (student,students[student][subject],subject)
        else:
            print "subject %s not found for student %s" % (subject,student)
    else:
        print "student %s not found" % (student)

すべてをまとめると、次のようになります。

scores = """Justin:Calculus$90:Java$85:Python$88:
Taylor:Calculus$73:Java$95:Python$86:
Drew:Calculus$80:Java$75:Python$94:"""

students = {}
for studentdata in scores.split('\n'):
    data = studentdata.split(':')
    name = data[0]
    students[name] = {}
    for class_data in data[1:]:
        if class_data:
            class_name,class_score = class_data.split('$')
            students[name][class_name] = class_score

def findScore(student,subject):
    if student in students:
        if subject in students[student]:
            print "student %s got %s of the course %s" % (student,students[student][subject],subject)
        else:
            print "subject %s not found for student %s" % (subject,student)
    else:
        print "student %s not found" % (student)

#do some testing
findScore("Bob","Painting")
findScore("Taylor","Painting")
findScore("Taylor","Calculus")

辞書 (および他のデータ構造) の詳細については、こちらを参照してください。

于 2013-07-23T16:25:04.693 に答える