Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.91/88: Рейтинг темы: голосов - 88, средняя оценка - 4.91
34 / 34 / 21
Регистрация: 22.09.2013
Сообщений: 401

Словари

22.01.2017, 14:04. Показов 20553. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Решаю задачи на pythontutor.ru

У задачи следующее условие

В файловую систему одного суперкомпьютера проник вирус, который сломал контроль за правами доступа к файлам. Для каждого файла известно, с какими действиями можно к нему обращаться:

запись W,
чтение R,
запуск X.
В первой строке содержится число N — количество файлов содержащихся в данной файловой системе. В следующих N строчках содержатся имена файлов и допустимых с ними операций, разделенные пробелами. Далее указано чиcло M — количество запросов к файлам. В последних M строках указан запрос вида Операция Файл. К одному и тому же файлу может быть применено любое колличество запросов.

Вам требуется восстановить контроль над правами доступа к файлам (ваша программа для каждого запроса должна будет возвращать OK если над файлом выполняется допустимая операция, или же Access denied, если операция недопустима.
Не понимаю как правильно сформировать эти списки.

Python
1
2
3
4
5
6
7
file = dict()
acces = dict()
 
n = int(input())
for i in range(n):
    s = input()
    file[s.split(" ")[1]] = s.split(" ")
Такая конструкция не работает.
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
22.01.2017, 14:04
Ответы с готовыми решениями:

Словари
Короче, с сайта получаю вот такой ответ. Как из него сделать словарь?

Словари
Создайте основной словарь, содержащий имена продавцов iphone, и модель. Создайте дополнительный словарь, содержащий названия моделей и...

Словари
Дан словарь, где ключами являются названия литературных произведений, а значениями — фамилии писателей. Создать словарь, где ключами...

9
14 / 14 / 15
Регистрация: 19.01.2017
Сообщений: 48
22.01.2017, 14:28
Лучший ответ Сообщение было отмечено Sluchayno как решение

Решение

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
files = {}
for i in range(int(input())):
    name, *operations = input().split()
    files[name] = operations
for i in range(int(input())):
    operation, name = input().split()
    if operation == 'read':
        if 'R' in files[name]:
            print('OK')
        else:
            print('Access denied')
    elif operation == 'write':
        if 'W' in files[name]:
            print('OK')
        else:
            print('Access denied')
    elif operation == 'execute':
        if 'X' in files[name]:
            print('OK')
        else:
            print('Access denied')
Вы не правильно поставили условие, надо было показать пример входных и выходных данных.

Входные данные:
4
helloworld.exe R X
pinglog W R
nya R
goodluck X W R
5
read nya
write helloworld.exe
execute nya
read pinglog
write pinglog


Выходные данные:
OK
Access denied
Access denied
OK
OK
1
34 / 34 / 21
Регистрация: 22.09.2013
Сообщений: 401
22.01.2017, 14:51  [ТС]
rebirth
Блин, спасибо еще раз. Снова помог. + в карму )
0
0 / 0 / 0
Регистрация: 18.02.2016
Сообщений: 9
02.02.2017, 18:30
можно узнать подробней ,что делает эта строчка?
Python
1
name, *operations = input().split()
0
34 / 34 / 21
Регистрация: 22.09.2013
Сообщений: 401
03.02.2017, 15:26  [ТС]
st1t4
на сколько я знаю input().split() это чтение строки и разделение ее по разделителю, в моем случае разделителем был пробел поэтому перед переменной operation стоит *, что означает что данная переменная может принять несколько значений, то есть все значения после 1 пробела, на а в name заноситься имя файла.
0
 Аватар для Semen-Semenich
5222 / 3469 / 1173
Регистрация: 21.03.2016
Сообщений: 8,295
03.02.2017, 19:22
Python
1
2
3
4
5
6
7
8
files = {}
for _ in range(int(input())):
    name, *operations = input().split()
    files[name] = operations
access = {'read':'R','write':'W','execute':'X'}
for _ in range(int(input())):
    acc,nam = input().split()
    print('OK' if access[acc] in files[nam] else 'Access denied')
0
34 / 34 / 21
Регистрация: 22.09.2013
Сообщений: 401
03.02.2017, 21:28  [ТС]
Semen-Semenich
А вот этого вашего решения я уже не понимаю, не могли бы вы разъяснить что здесь к чему?
0
 Аватар для Semen-Semenich
5222 / 3469 / 1173
Регистрация: 21.03.2016
Сообщений: 8,295
04.02.2017, 11:56
суть та же что и у rebirth, но только чтоб не писать кучу строк с условиями я создал словарь где ключ это слово - права доступа а значение его буквенный вариант и теперь получая в цикле значение прав доступа и имя файла сравниваем значения из словаря прав по ключу доступа и значения из словаря файлов по имени файла и если
значение одного есть в списке другого то выводим ок если нет то Access denied
0
0 / 0 / 0
Регистрация: 18.02.2016
Сообщений: 9
21.03.2017, 21:53
а можно ли реализовать этот код на паскале?
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
files = {}
for i in range(int(input())):
    name, *operations = input().split()
    files[name] = operations
for i in range(int(input())):
    operation, name = input().split()
    if operation == 'read':
        if 'R' in files[name]:
            print('OK')
        else:
            print('Access denied')
    elif operation == 'write':
        if 'W' in files[name]:
            print('OK')
        else:
            print('Access denied')
    elif operation == 'execute':
        if 'X' in files[name]:
            print('OK')
        else:
            print('Access denied')
хочется в Delphi визуальный вид сделать(кнопка,выводное окно),на питоне такое сделать знаний не хватает. В паскале код работает с ошибками ,пытался сделать через массивы ,но ничего не вышло.
0
Заблокирован
03.08.2020, 10:27
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
d = {}
n = int(input())
for i in range(n):
    S = input().split()
    d[S[0]] = set()
    for i in range(1, len(S)):
        if S[i] == "R":
            d[S[0]].add("read")
        elif S[i] == "W":
            d[S[0]].add("write")
        else:
            d[S[0]].add("execute")
m = int(input())  
for i in range(m):
    S = input().split()
    if S[0] in d[S[1]]:
        print("OK")
    else:
        print("Access denied")
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
03.08.2020, 10:27
Помогаю со студенческими работами здесь

Словари
Произошла такая ситуация. Есть словарь, в нем несколько ключей и мне нужно по необходимости помещать несколько описаний для одного ключа....

Словари
Нужно составить словарь из студентов, ФИО, возраст, группа, количество сданных экзаменов. Словарь вот такой: students = * 8 students...

Словари
Имеется словарь следующего вида: {1: , 4: , 5: }, где ключи - цифры от 1 до 9, а значения - списки, состоящие из некоторого количества...

Словари
Помогите решить задачу Приняв способ изображения рационального числа в виде записи с двумя полями целого типа написать программу,...

Словари
Подскажите. Никкогда раньше не работал со словарями. Полскажите варимнт решения Даны 2 списка словарей с ключами name и age. Удалить из...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru