Python,嵌套字典元素链接

时间:2018-06-13 10:06:13

标签: python dictionary nested conditional-statements nested-lists

我正在尝试输入n个学生的分数并找到特定学生的平均分。我正在使用嵌套的字典项,并尝试在一行代码中输入。标记范围从0到100,我需要在链接到字典键之前执行此操作。下面是我的代码,我没有达到范围(0到100)的条件。请帮忙。

let name;
beforeEach(function() {
  browser.get('http://localhost:8080/#/');
  name = element(by.css("*[id='field_nombre']"));
}      
it('Scenario 1', function () {
  name.click();
}

3 个答案:

答案 0 :(得分:1)

而不是if x in range(0,101),您应该使用if x >= 0 and x <= 100或@mata建议您可以使用if 0 <= x <= 100

x in range(0, 101)仅在True为整数且介于0和100(含)之间时才返回x

答案 1 :(得分:0)

@Mahantesh ,当我从您的代码中阅读并理解时,我试图以我的方式实现您的问题。我采取了与您采取的相同的变量名称。

  

我还使用json模块来打印字典。

请检查以下代码,如果您需要更改,请与我们联系。

  

不要忘记检查输出。

import json 

def get_averages():
    student_marks = {};
    successful_trials = 0; # IT IS NOT REQUIRED, JUST TO MAKE PROGRAM USER FRIENDLY

    while True:
        try:
            # CREATE A LIST 
            # ['Rishikesh', '90', '95', '90', '80', '85', '70']
            line = input('\n('+ str(successful_trials + 1) + ') ENTER NAME SEPARATED BY 1 OR MORE SCORES SPACE SEPARATED (TYPE exit TO STOP) >>> ').split(); 
            if len(line) > 0: 
                # NAME OF STUDENT  => 'Rishikesh'
                name = line[0]; 

                if name.lower() == 'exit': # IF USER ENTERS ANYTHING STARTING WITH exit (stop iteration)
                    break

                # SCORES OF A STUDENT (INTEGERS) => [90, 95, 90, 80, 85, 70]
                scores = [int(number) if (int(number) >= 0 and int(number) <= 100) else -1 for number in line[1:]] 

                if not scores:
                    print("\nERROR: INPUT SHOULD HAVE  AT LEAST 1 OR MORE SCORES (SPACE SEPARATED)")
                    continue    
            else:
                print("\nERROR: INPUT SHOULD HAVE NAME FOLLOWED BY AT LEAST 1 OR MORE SCORES (SPACE SEPARATED)")
                continue

            if -1 not in scores: # SCORES ARE IN RANGE MEANS IT IS NOT LIKE [90, -1, 90, -1, 85, 70]
                student_marks[name] = {
                    "scores": scores,
                    "average": sum(scores) / len(scores) # AVERAGE
                }
            else:
                print("\nERROR: ENTERED SCORES ARE NOT IN RANGE")
                continue    

            successful_trials += 1; # IF EVERYTHING PASSED
        except Exception as error:
            print('\nERROR OCCURED: ', error)
            print("\nPLEASE ENTER CORRECT VALUE")
            continue

    return student_marks; # DICTIONARY OF DICTIONARIES

if __name__ == "__main__":
    # CALL TO get_averages()
    student_marks = get_averages();

    # PRETTY PRINTING DICTIONARY USING json MODULE
    print(json.dumps(student_marks, indent=4));

»Output1

(py3.6) H:\RishikeshAgrawani\Projects\Sof\EntrySof>python EntrySof.py

(1) ENTER NAME SEPARATED BY 1 OR MORE SCORES SPACE SEPARATED (TYPE exit TO STOP) >>> student1 56 67 35 45

(2) ENTER NAME SEPARATED BY 1 OR MORE SCORES SPACE SEPARATED (TYPE exit TO STOP) >>> student2 67 45  35 24

(3) ENTER NAME SEPARATED BY 1 OR MORE SCORES SPACE SEPARATED (TYPE exit TO STOP) >>> student3 101 56

ERROR: ENTERED SCORES ARE NOT IN RANGE

(3) ENTER NAME SEPARATED BY 1 OR MORE SCORES SPACE SEPARATED (TYPE exit TO STOP) >>> student3 100 0 90

(4) ENTER NAME SEPARATED BY 1 OR MORE SCORES SPACE SEPARATED (TYPE exit TO STOP) >>> student4 ok new

ERROR OCCURED:  invalid literal for int() with base 10: 'ok'

PLEASE ENTER CORRECT VALUE

(4) ENTER NAME SEPARATED BY 1 OR MORE SCORES SPACE SEPARATED (TYPE exit TO STOP) >>> student4 70 40 50 70

(5) ENTER NAME SEPARATED BY 1 OR MORE SCORES SPACE SEPARATED (TYPE exit TO STOP) >>> exit
{
    "student1": {
        "scores": [
            56,
            67,
            35,
            45
        ],
        "average": 50.75
    },
    "student2": {
        "scores": [
            67,
            45,
            35,
            24
        ],
        "average": 42.75
    },
    "student3": {
        "scores": [
            100,
            0,
            90
        ],
        "average": 63.333333333333336
    },
    "student4": {
        "scores": [
            70,
            40,
            50,
            70
        ],
        "average": 57.5
    }
}

»Output2

(py3.6) H:\RishikeshAgrawani\Projects\Sof\EntrySof>python EntrySof.py

(1) ENTER NAME SEPARATED BY 1 OR MORE SCORES SPACE SEPARATED (TYPE exit TO STOP) >>> hygull 50 60 70

(2) ENTER NAME SEPARATED BY 1 OR MORE SCORES SPACE SEPARATED (TYPE exit TO STOP) >>> gurudev 78 22 50 55 45

(3) ENTER NAME SEPARATED BY 1 OR MORE SCORES SPACE SEPARATED (TYPE exit TO STOP) >>> user1 60 -5 9

ERROR: ENTERED SCORES ARE NOT IN RANGE

(3) ENTER NAME SEPARATED BY 1 OR MORE SCORES SPACE SEPARATED (TYPE exit TO STOP) >>> user2 100 40 kite

ERROR OCCURED:  invalid literal for int() with base 10: 'kite'

PLEASE ENTER CORRECT VALUE

(3) ENTER NAME SEPARATED BY 1 OR MORE SCORES SPACE SEPARATED (TYPE exit TO STOP) >>> user3 90 90 100 50

(4) ENTER NAME SEPARATED BY 1 OR MORE SCORES SPACE SEPARATED (TYPE exit TO STOP) >>> exit
{
    "hygull": {
        "scores": [
            50,
            60,
            70
        ],
        "average": 60.0
    },
    "gurudev": {
        "scores": [
            78,
            22,
            50,
            55,
            45
        ],
        "average": 50.0
    },
    "user3": {
        "scores": [
            90,
            90,
            100,
            50
        ],
        "average": 82.5
    }
}

答案 2 :(得分:0)

下面是我的代码,它工作得很好。

if __name__ == '__main__':
    n = int(input())
    if n in range(2,11):
        student_marks = {}
        for _ in range(n):
            line = raw_input().split()
            name = line[0]
            scores =  line[1:]
            scores = list(map(float, scores))

            truth,x,y = 0,0,0
            y = len(scores)
            for x in scores:
                if 0<=x<=100:
                    truth = truth+1

            if(truth == y):
                student_marks[name] = scores
            else:
                print("Marks out of range")

        query_name = raw_input()

        add = 0
        m=0
        """for s in student_marks[query_name]:
            m = m+1"""
        #if x in student_marks:
        for x in student_marks:
            if x == query_name:
                y = len(student_marks[query_name])
                for g in (student_marks[query_name]):
                    add = add + g
                average = float(add/y)
                print("%.2f" % average)