首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >编写干净的代码:在金字塔中嵌套/If/Elif

编写干净的代码:在金字塔中嵌套/If/Elif
EN

Stack Overflow用户
提问于 2015-11-20 20:48:14
回答 1查看 333关注 0票数 1

目标:试图打印未决结果(Assessment.name,例如'Becoming a Leader''Something Else'等.--打印用户在all_assessments中未完成的内容)和已完成的结果( Assessment_Results.assessment.name中的assessment.name,例如'Becoming a Leader' --如user_results中所示),使用带必要条件的干净和快速的for循环打印用户已完成的结果。

问题:当前代码没有达到上述目标。

任何建议都是非常感谢的!我还是个新手,所以任何指导都是受欢迎的!

Views.py

代码语言:javascript
复制
   def view_assessments(request):
        owner = authenticated_userid(request)
        print 'login owner', owner
        if owner is None:
            raise HTTPForbidden()
        all_assessments = api.retrieve_assessments()
        print 'these are all the assessments:', all_assessments
        print 'and type:', type(all_assessments)
        all_results = api.retrieve_assessment_results() # all the assessment results in a list
    
for x in all_assessments:
    alls = x.name
    if alls is not None: 
        for x in all_results: #found user based on all results
            assessment = x.assessment.name
            user = x.owner.username
            if user == owner:
                print 'completed', assessment
            elif assessment != alls: # DOES NOT WORK
                alls.index(assessment)

return {'assessments': all_assessments, 'assessment_results': all_results, 'loggedin': owner, 'user_results': user_results}

api所做工作的细目:

当前,all_assessments打印出所有现有评估名称和文本的列表。

代码语言:javascript
复制
all_assessments = [<Assessment(name='Becoming a Leader', text='better decisions')>, <Assessment(name='Good work', text='working on these skills')>, <Assessment(name='Teaching NTS', text='Series 1.1')>]

all_results则输出列表中每个用户的所有结果。如下所示:

代码语言:javascript
复制
all_results [<Assessment_Result(owner='<User(username ='baseball', password='...', firstname ='Jenny', lastname ='Jen', email='dance@aol.com')>', assessment='<Assessment(name='Becoming a Leader', text='better decisions')>')>, <Assessment_Result(owner='<User(username ='donald', password='...', firstname ='Drew', lastname ='James', email='cool@gmail.com')>', assessment='<Assessment(name='Good work', text='working on these skills')>')>]

最后,user_results打印由用户名(基于登录的人)找到的结果。

代码语言:javascript
复制
retrieved by username: [<Assessment_Result(owner='<User(username ='dorisday', password='..', firstname ='Doris', lastname ='Day', email='dorisday@gmail.com')>', assessment='<Assessment(name='Becoming a Leader', text='better decisions')>')>, <Assessment_Result(owner='<User(username ='dorisday', password='..', firstname ='Doris', lastname ='Day', email='dorisday@gmail.com')>', assessment='<Assessment(name='Good work', text='working on these skills')>')>]
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-11-22 20:13:24

我会从这样的开始:

代码语言:javascript
复制
def view_assessments(request):
     logged_in_userid = authenticated_userid(request)
     if logged_in_userid is None:
         raise HTTPForbidden()
     all_assessments = api.retrieve_assessments()
     all_results = api.retrieve_assessment_results()

     completed_assessments = []
     pending_assessments = []

     for assessment in all_assessments:
         if assessment.name is None: 
             continue

         found_assessment_result = False
         for result in all_results:
             if result.owner.username == logged_in_userid and result.assessment == assessment:
                 found_assessment_result = True
                 break  # no need to check further

         if found_assessment_result:
             compleded_assessments.append(assessment)
         else:
             pending_assessments.append(assessment)


      return {'completed_assessments': completed_assessments, 'pending_assessments': pending_assessments, 'loggedin': owner, 'user_results': user_results}

这里的诀窍是,当迭代两个嵌套列表时,有一个“查找”布尔值,在进入内环之前将其设置为False --内环结束后,您可以检查变量,并根据其值将评估结果推入两个列表中的一个。

正如您所怀疑的,这段代码可能效率很低,因为它必须对所有评估和所有结果的乘积进行迭代,因此,如果您有10个评估和10个结果,它将需要100个迭代,但是如果您有100个评估和100个结果,则需要10.000次迭代。但它可以作为一种学习练习。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33835819

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档