Изначально она звучит так:
В Unix-подобных ОС права доступа к ресурсу могут быть заданы в восьмеричной системе, например число 644 означает разрешение на чтение и запись для владельца ресурса и разрешает только чтение для всех остальных.
Напиши программу, которая будет переводить права, заданные в восьмеричной системе, в их текстовое описание, например decode_unix_rights('644') должна будет вывести что-то типа такого:
User:
+ can read
+ can write
- cannot execute
Group:
+ can read
- cannot write
- cannot execute
Others:
+ can read
- cannot write
- cannot execute
Вот как я решил это — тупо и топорно:
#!/bin/env python
rights = 0b110100100
def compare_owner(num):
if num == 0b000:
return "Нет прав"
elif num == 0b001:
return "Права на исполнение для владельца"
elif num == 0b010:
return "Права на запись для владельца"
elif num == 0b011:
return "Права на запись и выполнение для владельца"
elif num == 0b100:
return "Права на чтение для владельца"
elif num == 0b101:
return "Права на чтение и выполнение для владельца"
elif num == 0b110:
return "Права на чтение и запись для владельца"
elif num == 0b111:
return "Полный доступ для владельца"
def compare_group(num):
if num == 0b000000:
return "Нет прав"
elif num == 0b000001:
return "Права на исполнение для группы"
elif num == 0b000010:
return "Права на запись для группы"
elif num == 0b000011:
return "Права на запись и выполнение для группы"
elif num == 0b000100:
return "Права на чтение для группы"
elif num == 0b000101:
return "Права на чтение и выполнение для группы"
elif num == 0b000110:
return "Права на чтение и запись для группы"
elif num == 0b000111:
return "Полный доступ для группы"
def compare_others(num):
if num == 0b000000:
return "Нет прав"
elif num == 0b000000001:
return "Права на исполнение для остальных"
elif num == 0b000000010:
return "Права на запись для остальных"
elif num == 0b000000011:
return "Права на запись и выполнение для остальных"
elif num == 0b000000100:
return "Права на чтение для остальных"
elif num == 0b000000101:
return "Права на чтение и выполнение для остальных"
elif num == 0b000000110:
return "Права на чтение и запись для остальных"
elif num == 0b000000111:
return "Полный доступ для остальных"
compare_owner(rights)
compare_group(rights)
compare_others(rights)
Изначально вместо return было print, однако всё равно нихера оно не делало. Пожалуйста, объясните кому не сложно мне про двоичные числа. Я могу в уме всё это делать, типа всякие там and, xor и прочее и понимаю как это устроено, а как это использовать не понимаю. Почему нихера не пишет? И как решить это с использованием and? Потому что мне недвусмысленно намекали, что именно так надо. Я просто нихрена не понял.
P.S. Походу подсветка синтаксиса у лора не прожёвывает двоичные, таки баг.