【问题标题】:octal to string - trouble八进制转字符串 - 麻烦
【发布时间】:2021-05-15 09:10:20
【问题描述】:

我似乎无法理解在线课程中给出的这个问题的解决方案。我找到了解决它的实际代码,但我仍然不明白。谁能更详细地向我解释一下为什么这样做?我将不胜感激。

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-------

【问题讨论】:

    标签: python string octal


    【解决方案1】:

    我相信您已经意识到,每个八进制数字(oit?octit?)对应于一组权限,这些权限由各个权限的总和给出。

    0 = ---
    1 = --x
    2 = -w-
    3 = -wx
    4 = r--
    5 = r-x
    6 = rw-
    7 = rwx
    

    我们可以通过从我们的八进制数字中减去每个权限对应的值来得出这个字符串。

    (6, '') -> (2, 'r') -> (0, 'rw') -> (0, 'rw-')

    对于循环行,由于octal 变量是一个 3 位(八进制)整数,我们首先将其转换为字符串,将每个字符分开以获得各个八进制数字,然后将它们转换回整数,因此我们可以处理它们。我们不是为每个操作编写单独的语句,而是使用 list comprehension 来生成我们将循环的八进制数字列表。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-07
      • 2020-09-16
      • 1970-01-01
      • 2016-04-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多