2013-07-23 19 views
0

我將如何使用字符串和拆分來從列表中的三個特定人員中的三個不同成績中獲得特定成績。這是名單。 賈斯汀:微積分90美元:Java 85美元:Python 88美元: 泰勒:微積分73美元:Java 95美元:Python 86美元: 德魯:微積分80美元:Java 75美元:Python 94美元: 我目前堅持這一點。我能找到的最好的例子就是這個。Jython -Python如何返回字符串的不同部分以獲得成績

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] 

正如你所見。問題在於它只返回電話號碼和標題。我需要做的僅僅是返回一個班級的姓名和成績,只有兩個輸入(姓名,學科)。 這是我到目前爲止。

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]) 

是的,我是一個新手。儘管如此,我一直在尋找如何做到這一點。

+0

數據真的看起來像那樣嗎?它來自哪裏,或者僅僅是一個練習? – RussW

回答

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) 

它不能保證學生和學科是在字典,如果他們不是會發生錯誤。爲了防止這一點,只需檢查一下,關鍵是在詞典:

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") 

辭書一些更多的信息(以及其他數據結構)可以發現here

+0

非常感謝,但是這會返回一些錯誤。當我的輸入是findScore(「Justin」,「Java」)時,它給了我「學生Justin得到了85課程的Java」 – user2611288

+0

此外,還有關於格式化字符串的信息[here](http://stackoverflow.com/questions/ 997797/python-and-s)如果你想改變它打印的內容。 –

+0

對於遲到的回覆感到抱歉,但是,昨天對我來說這是一個快速解決方案。非常感謝。我只是無法找到示例來向我展示如何使用2次拆分來獲得不同部分,從而最終確定findScore的運行結果。 – user2611288

相關問題