2016-09-24 8 views
0

Я хочу написать функцию decode (chmod), которая принимает трехзначный номер разрешений в виде строки и возвращает разрешения, которые она предоставляет. Кажется, работает, если я не попрошу нулевой элемент. Я не мог понять, почему так.Python list zeroth element mix

def decode(chmod): 

    liste = [int(i)for i in str(chmod)] 


    chmod = ["None", "Execute only", "Write only", 
     "Write and Execute", "Read only", 
     "Read and Execute", "Read and Write", 
     "Read Write and Execute"] 

    for i in liste: 

     print chmod[i] 

    return liste 

print decode(043) 

ответ

1

Вам нужны цитаты из раздела 043. Попробуйте '043'.

+0

Спасибо за ваш ответ - изменение str

Try. Но я не должен участвовать в работе. Я только проверял, работает ли это. – janvar

+1

Когда python видит 043, он считает, что это целое число в восьмеричном формате. Ваша функция декодирования получит этот intger. Выполнение str() на нем не то, что вы хотите. Если вы хотите передать восьмеричное целое число, вы должны преобразовать его обратно в восьмеричную строку rep. (str() недостаточно). – sureshvv

+1

@grv: В описании, которое вы написали, написано: «принимает трехзначный номер разрешения ** как строку **». Но в вашем тесте вы не передаете строку; вы передаете целое число. Отсюда и необходимость цитат. –

1

(Предполагая, что вы хотите передать целое число)

043 является базовым 8 таким же, как 35 в основании 10. Поэтому Вы пропускание числа 35 в функцию декодирования. >oct

liste = [int(i) for i in oct(chmod)[2:]] #Use [2:] in Py3, and [1:] in Py2 
+0

Или просто 'liste = oct (chmod)', поскольку 'for i in liste' будет проходить через каждый символ. – AArias

+0

Вы, вероятно, хотите 'oct (chmod) [2:]' отрезать префикс '0o'. Или, может быть, 'format (chmod, '03o')', чтобы убедиться, что вы всегда получаете восьмеричную восьмеричную строку. –

+0

@MarkDickinson: Спасибо, я пропустил факт, что это '043' в Py2 и' 0o43' в Py3. Обновлен мой ответ. :) – SuperSaiyan

 Смежные вопросы

  • Нет связанных вопросов^_^