Восьмеричное преобразование в строку – проблемаPython

Программы на Python
Anonymous
Восьмеричное преобразование в строку – проблема

Сообщение Anonymous »

Кажется, я просто не могу понять решение этой проблемы, данное в онлайн-курсе. Я нашел код, который решает эту проблему, но до сих пор его не понимаю. Может ли кто-нибудь объяснить мне немного подробнее, почему это делает то, что делает? Буду чрезвычайно признателен.
Разрешения файла в системе Linux разделены на три набора по три разрешения: чтение, запись и выполнение для владельца, группы и других. Каждое из трех значений может быть выражено в виде восьмеричного числа, суммирующего каждое разрешение: 4 соответствует чтению, 2 — записи и 1 — выполнению. Или его можно записать в виде строки с использованием букв r, w и x или - когда разрешение не предоставлено.
Например:
640 — чтение/запись для владельца, чтение для группы. , и никаких разрешений для остальных; преобразованный в строку, это будет: "rw-r-----"
755 читается/записывается/исполняется для владельца, а чтение/выполнение для группы и других; преобразуется в строку, это будет: "rwxr-xr-x"
Заполните пробелы, чтобы код преобразовал разрешение в восьмеричном формате в строковый формат. Больше всего меня смущает строка с циклом for - я ее просто не понимаю.
Решение, которое я нашел в Интернете (работает правильно):
def octal_to_string(octal):
result = ""
value_letters = [(4,"r"),(2,"w"),(1,"x")]
# Iterate over each of the digits in octal
for i in [int(n) for n in str(octal)]:
# Check for each of the permissions values
for value, letter in value_letters:
if i >= value:
result += letter
i -= value
else:
result += '-'
return result

print(octal_to_string(755)) # Should be rwxr-xr-x
print(octal_to_string(644)) # Should be rw-r--r--
print(octal_to_string(750)) # Should be rwxr-x---
print(octal_to_string(600)) # Should be rw-------


Подробнее здесь: https://stackoverflow.com/questions/661 ... ng-trouble

Вернуться в «Python»