2016-01-06 40 views
-5

Im和MSc的學生今年一直忙於執行python代碼,但沒有任何經驗。我想知道如果有人能夠幫助我解決這個問題,我已經完成了一些部分。使用Python進行大學作業的問題

Q6)

作業6個 等級根據%(範圍從0到100(含)分類的),如果大於或等於如下: - 70首先;上部60秒; 50秒下; 45第三; 40通; 0失敗。 根據以上數據創建一本詞典,並將其作爲程序的一部分,以便從兩個來源中對分數進行評分: - 1.在開發過程中,從硬編碼的標記列表中按順序評分標記= [-1,0,1 ,49,60,71,100,101], 2.開發後,包括代碼重複請求標記進行測試,直到通過輸入q或Q來終止。 標記將被授予簡潔的編碼,該編碼應該在最少使用比較測試。 在最終代碼中保留上面兩個來源的輸入的功能,即在開發後不要刪除項目'1'。

我的解決方案至今看起來是這樣的:

hardcoded_lst = [-1,0,1,49,60,71,100,101] 
grade_input=int(input('What grade?') 
input_lst= [] 
while grade_input != 
    input_lst.append(grade_input) 
    grade_input=int(input('What grade?') 
print(input_lst) 

我需要創建一個字典中的值,但目前是心不是工作要麼。

我很感激任何幫助,在基本代碼,因爲我不是很先進。

感謝

+5

您是否做過任何調查?你讀過標準的Python文檔嗎?你知道如何創建一個Python字典嗎?創建字典的哪一部分需要幫助? –

+1

我已經通讀了我們給出的所有筆記,但它沒有給出太多關於如何創建字典或在其上列出清單。我有這樣的事情,(但是它不工作) d = {<0: '無效', <40: '失敗', <45: '通過', <50: '第三', < 60:'Second Lower', <70:'Second Upper', > 70:'First', > 100:'Invalid'} – joshosh

+3

在提出問題之前,您應該先做的第一件事是閱讀一些文檔。詞典上的Python文檔非常全面。請參閱https://docs.python.org/3.5/tutorial/datastructures.html?highlight=dictionary#dictionaries和https://docs.python.org/3.5/library/stdtypes.html#mapping-types-dict –

回答

0

下面的程序應該按照你的要求。有幾行註釋掉#字符。如果您希望查看調用debug函數時引用的變量的值,則可以取消註釋這些行。請花時間研究代碼,以便了解它的工作原理和原理。

import pprint 
import sys 

RANGE = range(0, 101) 
GRADE = {70: 'First', 60: 'Second Upper', 
     50: 'Second Lower', 45: 'Third', 
     40: 'Pass', 0: 'Fail'} 
MARKS = -1, 0, 1, 49, 60, 71, 100, 101 


def main(): 
    """Grade hardcoded marks and grade marks entered by the user.""" 
    # debug('MARKS') 
    grade_all(MARKS) 
    grade_all(get_marks()) 
    print('Goodbye!') 


def grade_all(marks): 
    """Take an iterable of marks and grade each one individually.""" 
    for mark in marks: 
     # debug('mark') 
     if mark in RANGE: 
      print(mark, 'gets a grade of', grade_one(mark)) 
     else: 
      print(mark, 'is not a valid mark') 


def grade_one(mark): 
    """Find the correct grade for a mark while checking for errors.""" 
    # debug('RANGE') 
    if mark in RANGE: 
     for score, grade in sorted(GRADE.items(), reverse=True): 
      if mark >= score: 
       return grade 
    raise ValueError(mark) 


def get_marks(): 
    """Create a generator yielding marks until the user is finished.""" 
    while True: 
     try: 
      text = input('Mark: ') 
     except EOFError: 
      sys.exit() 
     else: 
      # debug('text') 
      if text.upper() == 'Q': 
       break 
      try: 
       mark = round(float(text)) 
      except ValueError: 
       print('Please enter a mark') 
      else: 
       # debug('mark') 
       if mark in RANGE: 
        yield mark 
       else: 
        print('Marks must be in', RANGE) 


def debug(name): 
    """Take the name of a variable and report its current status.""" 
    frame, (head, *tail) = sys._getframe(1), name.split('.') 
    for scope, space in ('local', frame.f_locals), ('global', frame.f_globals): 
     if head in space: 
      value = space[head] 
      break 
    else: 
     raise NameError('name {!r} is not defined'.format(head)) 
    for attr in tail: 
     value = getattr(value, attr) 
    print('{} {} {} = {}'.format(
     scope, type(value).__name__, name, pprint.pformat(value)), flush=True) 

if __name__ == '__main__': 
    main() 
-1

您需要創建使用等級值作爲鍵的字典,並根據輸入填充與輸入密鑰,或拒絕爲無效。也許是這樣的:

if input>=70: 
    grade[first]=input 
elif input>=60 and input<70: 
    grade[secondupper]=input 



elif input<0 or input>100: 
    print 'invalid grade!' 

如果你有每個年級一個以上的值,那麼可以考慮使用一個列表來讀取值進去,然後設置corresonding dictionarty值的列表,你填充它。

+0

這可能只是OP * *不應該做的。 – JimmyB

+0

除了說明變量'first'和'secondupper'的含義之外,你似乎在修改等級字典。更重要的是,你對問題的解決方法是錯誤的,因爲它只需要使用最少的比較測試。 – Reti43

+0

公平點重新對比測試。我想我誤解了字典應該達到的目標。對不起OP。 –

1

創建字典是不是強硬,其作爲簡單的,創建列表,你已經做了

對於列表

mylist = [] 
    #for dictionary 
    mydictionary = {} 

添加到項目字典

mylist.append(value) 
    mydictionary["fail"] = 50 

迭代列表

for item in mylist: 
    print item 

迭代的字典

for key,value in mydictionary.iteritem(): 
    print key,value 

我希望這可以幫助你,有可能是錯誤的iteritem拼寫等,你可以谷歌,但多數民衆贊成如何,其常做

這裏被更新的東西

mydictionary = {} 

marks = 0 

mydictionary[(0,45)] = "Fail" 
mydictionary[(46,59)] = "Lower" 
mydictionary[(60,69)] = "Second Lower" 
mydictionary[(70,100)] = "First" 

marks = 63 

for key,value in mydictionary.iteritems(): 
    if marks >= key[0] and marks <= key[1]: 
     print value 

給定的代碼的作品,你也可以這樣做,雖然

+0

讓OP從正確的方向開始的好答案。 - 儘管我不確定,他的字典應該是什麼樣子,即50 - >「失敗」,「失敗」 - > 50,或者(50,60) - >「失敗」。 – JimmyB

+0

我想我得到了你在說什麼,但我仍然很迷茫.... – joshosh

+0

你可以問你什麼不明白,我可能會進一步闡述。 – AbdulMueed