簡體   English   中英

如果If為True,則使用Else語句進行編程

[英]Programming resorting to Else statement when If is True

我正在處理詞典列表:

student_list = [{'id': 12341, 'first_name': 'Alice', 'last_name': 'Anderson',
     'assignments': [('assignment_1', 0), ('assignment_2', 2), ('assignment_3', 4)]},

 {'id': 12342, 'first_name': 'Boris', 'last_name': 'Bank',
   'assignments': [('assignment_1', 1), ('assignment_2', 3), ('assignment_3', 0)]},

 {'id': 12343, 'first_name': 'Carl', 'last_name': 'Cape',
   'assignments': [('assignment_1', 2), ('assignment_2', 4), ('assignment_3', 1)]},

 {'id': 12344, 'first_name': 'Didi', 'last_name': 'Dawson',
   'assignments': [('assignment_1', 3), ('assignment_2', 0), ('assignment_3', 2)]},

 {'id': 12345, 'first_name': 'Ed', 'last_name': 'Enders',
   'assignments': [('assignment_1', 4), ('assignment_2', 1), ('assignment_3', 3)]}]

我需要編寫一個按學生姓名搜索字典的函數,以查看是否有匹配的作業名稱和年級。 如果存在,則返回True,否則返回False,並將其添加到列表中。 我已經掌握了什么,但是無論我鍵入的是true還是false,如果參數讀取為false並將賦值添加為元組,則無論如何。

您能幫我找到此功能所需的缺少說明嗎?

def add_grade(student, assignment_name, grade):
  for s in student_list:
    if s['first_name'] == student:
        if any(s['assignments']) == (assignment_name, grade):
          print(True)
        else:
          s['assignments'].append((assignment_name, grade))
          print(False)

add_grade('Carl', 'assignment_2', 2)
print(student_list)

編輯:第一個答案幫助我使代碼正常工作(謝謝!)

現在,我將其放寬並使其變得更松散,這樣就不必將作業添加兩次並添加兩個不同的等級,而是將其放置為已經存在。 我制作的東西笨拙且雜亂,似乎修復起來很容易,但我不知道。 思考?

def add_grade2(student, assignment_name, grade):
  for s in student_list:
    if s['first_name'] == student:
        if (assignment_name, grade) in s['assignments']:
          print(True)
        elif (assignment_name, 0) in s['assignments']:
          print('That assignment has a different grade. ')
          break
        elif (assignment_name, 1) in s['assignments']:
          print('That assignment has a different grade. ')
          break
        elif (assignment_name, 2) in s['assignments']:
          print('That assignment has a different grade. ')
          break
        elif (assignment_name, 3) in s['assignments']:
          print('That assignment has a different grade. ')
          break
        elif (assignment_name, 4) in s['assignments']:
          print('That assignment has a different grade. ')
          break
        else:
          s['assignments'].append((assignment_name, grade))
          print(False)


add_grade2('Alice', 'assignment_1', 3)
print(student_list)

問題是,對於一個學生, "assignments"是一個元組列表,在第一種情況下,您將整個列表與一個元組進行比較,在第二種情況下,您只需檢查是否assignment_name (第一個元組的位置)在列表中。

您可以將作業存在檢查更改為:

if (assignment_name, grade) in s['assignments']:
    print(True)
else:
    s['assignments'].append((assignment_name, grade))
    print(False)

另外,為了限制縮進並使內容更易於閱讀,您可以使用next查找正確的學生詞典。 然后您將擁有:

def add_grade(student, assignment_name, grade):
    s = next(s for s in student_list if s['first_name'] == student)
    if (assignment_name, grade) in s['assignments']:
        print(True)
    else:
        s['assignments'].append((assignment_name, grade))
        print(False)

編輯 :每個作業僅允許一個成績(不得覆蓋):

for i in range(len(s['assignments'])):
    if s['assignments'][i][0] == assignment_name:
        if s['assignments'][i][1] == grade:
            print(True)
        else:
            print('That assignment has a different grade.')
        return
s['assignments'].append((assignment_name, grade))
print(False)

或(邏輯更簡單,但計算量略多):

if (assignment_name, grade) in s['assignments']:
    print(True)
elif any(a_name == assignment_name for a_name, _ in s['assignments']):
    print('That assignment has a different grade.')
else:
    s['assignments'].append((assignment_name, grade))
    print(False)

覆蓋:

for i in range(len(s['assignments'])):
    if s['assignments'][i][0] == assignment_name:
        s['assignments'][i] = (assignment_name, grade)
        print(True)
        return
s['assignments'].append((assignment_name, grade))
print(False)

any返回的結果將為TrueFalse 那將永遠不會等於(assignment_name, grade)

尚不清楚您是否只希望匹配名稱或名稱等級。 無論哪種方式,您都將需要一個循環來搜索可能性。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM