Как мне распечатать диктант в правильном формате? - PullRequest
1 голос
/ 29 мая 2020

Ранее я использовал course_rolls(records), чтобы преобразовать данные в словарь ниже:

{'EMT001': {2286560}, 'FMKT01': {2547053}, 'CSC001': {2955520, 2656583}, 'MGM001': {2928707, 2606735}, 'MTH002': {2786372}, 'FCOM03': {2762453, 2955520, 2564885, 2606735}, 'FMCM02': {2955520, 2928707, 2656583}, 'ENG001': {2571096, 2564885}, 'MKT001': {2571096, 2656583},'AWA001': {2286560}, 'ACC002': {2762453}, 'FMTH01': {2571096}, 'EMT003': {2762453, 2656583}, 'MEA001': {2564885, 2606735}, 'FPHY01': {2564885}, 'FBIO01': {2547053}, 'MTH001': {2286560}, 'ECO002': {2928707, 2786372}, 'FCHM01': {2286560}, 'FCOM01': {2786372}, 'ENG002': {2762453}}

Переменная Records содержит:

[(('EMT001', 'Engineering Mathematics 1'), (2286560, 'Dayton', 'Archambault')), (('FMKT01', 'Marketing'), (2547053, 'Vladimir', 'Zemanek')), (('CSC001', 'Computer Programming'), (2656583, 'Ronny', 'Ridley')), (('MGM001', 'Fundamentals of Management'), (2928707, 'Susanne', 'Eastland')), (('MTH002', 'Mathematics 2'), (2786372, 'Danella', 'Crabe')), (('FCOM03', 'Introduction to Computing'), (2564885, 'Hpone', 'Ganadry')), (('FCOM03', 'Introduction to Computing'), (2762453, 'Phelia', 'Pottle')), (('FMCM02', 'Mass Communication II (Film Studies)'), (2656583, 'Ronny', 'Ridley')), (('ENG001', 'Foundations of Engineering'), (2564885, 'Hpone', 'Ganadry')), (('MKT001', 'Principles of Marketing'), (2571096, 'Shoshanna', 'Shupe')), (('AWA001', 'Engineering Writing Skills'), (2286560, 'Dayton', 'Archambault')), (('FCOM03', 'Introduction to Computing'), (2606735, 'Aaren', 'Enns')), (('ACC002', 'Financial Accounting'), (2762453, 'Phelia', 'Pottle')), (('FMTH01', 'Advanced Mathematics I'), (2571096, 'Shoshanna', 'Shupe')), (('FCOM03', 'Introduction to Computing'), (2955520, 'Bjorn', 'Kakou')), (('EMT003', 'Mathematical Modelling and Computation'), (2762453, 'Phelia', 'Pottle')), (('MEA001', 'Mixed English Programme'), (2564885, 'Hpone', 'Ganadry')), (('MGM001', 'Fundamentals of Management'), (2606735, 'Aaren', 'Enns')), (('MEA001', 'Mixed English Programme'), (2606735, 'Aaren', 'Enns')), (('FPHY01', 'Physics'), (2564885, 'Hpone', 'Ganadry')), (('FBIO01', 'Introduction to Biology'), (2547053, 'Vladimir', 'Zemanek')), (('ENG001', 'Foundations of Engineering'), (2571096, 'Shoshanna', 'Shupe')), (('MKT001', 'Principles of Marketing'), (2656583, 'Ronny', 'Ridley')), (('MTH001', 'Mathematics 1'), (2286560, 'Dayton', 'Archambault')), (('ECO002', 'Introduction to Macroeconomics'), (2786372, 'Danella', 'Crabe')), (('FCHM01', 'Chemistry'), (2286560, 'Dayton', 'Archambault')), (('FCOM01', 'Communication Skills II'), (2786372, 'Danella', 'Crabe')), (('FMCM02', 'Mass Communication II (Film Studies)'), (2928707, 'Susanne', 'Eastland')), (('CSC001', 'Computer Programming'), (2955520, 'Bjorn', 'Kakou')), (('ENG002', 'Engineering Mechanics and Materials'), (2762453, 'Phelia', 'Pottle')), (('EMT003', 'Mathematical Modelling and Computation'), (2656583, 'Ronny', 'Ridley')), (('FMCM02', 'Mass Communication II (Film Studies)'), (2955520, 'Bjorn', 'Kakou')), (('ECO002', 'Introduction to Macroeconomics'), (2928707, 'Susanne', 'Eastland'))]

Ввод программы: clashes CSC001

Ожидаемый результат (Команда: конфликты CSC001):

Clashes with CSC001:
In CSC001 and EMT003
  2656583: 

In CSC001 and FCOM03
  2955520: 

In CSC001 and FMCM02
  2656583: 
  2955520: 

In CSC001 and MKT001
  2656583: 

Результат, который я получаю (Команда: конфликты CSC001):

Clashes with CSC001:
In CSC001 and FCOM03  
  2955520: 

In CSC001 and FMCM02  
  2955520: 

In CSC001 and EMT003  
  2656583: 

In CSC001 and FMCM02  
  2656583: 

In CSC001 and MKT001  
  2656583: 

Программный код: (функция столкновений должна исправить )

def parse_course_code(commands, records):
    if commands in course_rolls(records).keys():
        print('Clashes with {}:'.format(commands))
        return clashes(commands, records)
    else:
        print("Unknown course code")


def clashes(course_code, records):
    unformatted_course_rolls = course_rolls(records)
    for course, prior_student_number in sorted(unformatted_course_rolls.items()):
        for prior_student_number_single in list(prior_student_number):
            if course_code == course:
                for code, student_number in sorted(unformatted_course_rolls.items()):
                    for num in list(student_number):
                        if prior_student_number_single == num and course != code:
                            print("In {} and {}  ".format(course, code))
                            print("  {}: \n".format(num))

def main():
    while True:
        command = input('Command: ')
        if command == 'quit':
            print('Adios')
            break
        else:
            parse_course_code(commands, records)
main()

1 Ответ

0 голосов
/ 29 мая 2020

Код, который вы предоставили, очень сложен для понимания. Вам следует попытаться использовать меньше циклов for - это затрудняет чтение кода и требует больше времени для выполнения (если вы выполняете что-то более крупное). Взгляните на мое решение ниже, оно выводит результат, как и следовало ожидать, и его намного легче читать и понимать.

Вот отредактированный код (обратите внимание, поскольку вы не предоставили функцию course_roll , Я изменил course_roll(records) на переменную course_rolls_records, чтобы я мог запускать ее локально.):

def parse_course_code(commands):
    if commands in course_rolls_records.keys():
        print('Clashes with {}:'.format(commands))
        return clashes(commands)
    else:
        print("Unknown course code")


def clashes(course_code):
    numbers_in_course = course_rolls_records[course_code]
    collisions = {}
    for course_check in course_rolls_records.keys():
        numbers_in_course_check = course_rolls_records[course_check]
        if course_check == course_code:
            # This is the course we are querying, we don't need to do anything
            pass
        elif numbers_in_course_check.intersection(numbers_in_course):
            # We enter here if there are common student numbers between courses
            # Note: if there is no intersection, bool of empty set is False
            collisions[course_check] = list(numbers_in_course_check.intersection(numbers_in_course))
            print("In {} and {}  ".format(course_code, course_check))
            for num in collisions[course_check]:
                print("  {}: ".format(num))
            print('\n')

def main():
    while True:
        command = input('Command: ')
        if command == 'quit':
            print('Adios')
            break
        else:
            parse_course_code(command)

main()
...