Замена элементов в списке элементами из другого списка - PullRequest
1 голос
/ 23 марта 2019

Я пытаюсь создать калькулятор для взвешенного ГПД пользователя.Я использую PyautoGUI, чтобы спросить пользователя о его оценках и типе класса, который они посещают.Но я хочу иметь возможность принять этот пользовательский ввод и по существу переназначить его на другое значение.

class GPA():
    grades = []
    classtypes = []

    your_format = confirm(text='Choose your grade format: ', title='', 
    buttons=['LETTERS', 'PERCENTAGE', 'QUIT'])

    classnum = int(prompt("Enter the number of classes you have: "))

    for i in range(classnum):
        grade = prompt(text='Enter your grade for the course 
:'.format(name)).lower()
    classtype = prompt(text='Enter the type of Course (Ex. Regular, AP, Honors): ').lower()

    classtypes.append(classtype)
    grades.append(grade)

    def __init__(self):
        self.gradeMap = {'a+': 4.0, 'a': 4.0, 'a-': 3.7, 'b+': 3.3, 'b': 3.0,'b-': 2.7,
         'c+': 2.3, 'c': 2.0, 'c-': 1.7, 'd+': 1.3, 'd': 1.0, 'f': 0.0}
        self.weightMap = {'advanced placement': 1.0, 'ap': 1.0, 'honors': 0.5,'regular': 0.0}

Ответы [ 2 ]

1 голос
/ 25 марта 2019

Основываясь на словаре gradeMap, который вы определили, вы можете сделать что-то с так называемым пониманием списка .

Пример того, о чем я говорю, сделан с использованием интерпретатора Python:

>>> grades = ['a', 'c-', 'c']
>>> gradeMap = {'a+': 4.0, 'a': 4.0, 'a-': 3.7, 'b+': 3.3, 'b': 3.0,'b-': 2.7,
...             'c+': 2.3, 'c': 2.0, 'c-': 1.7, 'd+': 1.3, 'd': 1.0, 'f': 0.0}
>>> [gradeMap[grade] for grade in grades] #here's the list comprehension
[4.0, 1.7, 2.0]

Я думаю, что недостатком этого подхода может быть то, что пользователь дает вам только оценку, которую вы определили в вашем gradeMap, иначе он даст вам KeyError.

Другой альтернативой будет использование map. map немного отличается тем, что ожидает функцию и список ввода, а затем применяет эту функцию к списку ввода.

Пример с очень простой функцией, которая работает только с несколькими оценками:

>>> def convert_grade_to_points(grade):
...   if grade == 'a':
...     return 4.0
...   elif grade == 'b':
...     return 3.0
...   else:
...     return 0
... 
>>> grades = ['a', 'b', 'b']
>>> map(convert_grade_to_points, grades)
[4.0, 3.0, 3.0]

Это также страдает недостатком, о котором я упоминал ранее, что определяемая вами функция должна обрабатывать случай, когда пользователь вводит недопустимую оценку.

0 голосов
/ 23 марта 2019

Вы можете заменить элементы списка на месте.

for grade in gradeList:
    if type is "PERCENTAGE":
       grade = grade × some_factor  # use your logic
    elif type is "LETTERS":
       grade="some other logic"
...