Python

时间:2016-07-10 20:29:29

标签: python string python-3.x if-statement printing

我有一个程序用于枚举具有Windows管理权限的用户。我还想显示找到的帐户数量,该帐户存储在名为num_administrator的变量中。 我有以下代码:

if num_administrators > 1:
    print("[*] {} accounts with administrative privileges found:\n".format(num_administrators))
    show_admins()
elif num_administrators == 1:
    print("[*] {} account with administrative privileges found:\n".format(num_administrators))
    show_admins()
else:
    print("[*] No accounts with administrative privileges found.\n")

如果没有管理员我想打印[*] No accounts with administrative privileges found. 如果有一个或多个管理员,则要显示的消息几乎相同,唯一的区别是根据号码显示accountaccounts。这只是一个字母(s)的问题。 我是否可以通过使用唯一的声明或以更简单的方式实现条件打印? 是否可以打印如下内容:

print("[*] {} account".format(num_administrators) + if num_administrators > 1 "s" + "with administrative privileges found:\n")

不介意我上面的代码,我不知道语法,如果我正在做的事情有意义,它只是让你知道我在想什么,你可以告诉我它是否可行

此外我正在调用函数show_admins() 3次(用于打印管理员帐户)但实际上我可以在最后调用它一次。

4 个答案:

答案 0 :(得分:2)

这是我制作的狡猾的单线:

"[*] {} account{} with administrative privileges found.\n".format("No" if num_administrators == 0 else str(num_administrators), "s" if num_administrators != 1 else "")

P.S。至于可读性,我不知道......我可能错了,但我觉得我的眼睛在流血

答案 1 :(得分:1)

如果您想使用单线解决方案,那么这里已经得到了解答。但是,我建议使用if / else语句,因为这样,解决方案更具可读性:

output = "[*] "

if num_administrators > 1:
    output += "{} accounts ".format(num_administrators)
elif num_administrators == 1:
    output += "1 account "
else:
    output += "No accounts "

output += "with administrative privileges found:\n"

答案 2 :(得分:0)

您可以执行类似

的操作
 if num_administrators > 1:
       print "The total number of administrators is %d"%(num_administrators)

或者,如果你想要它是一个字符串:

 if num_administrators > 1:
       print "The total number of administrators is %s"%(str(num_administrators))

所以这里最简单的方法是使用lambda:

l = lambda x:'No' if x == 0 else x
print("[*] {} accounts with adminstrative priveleges".format(l(num_admin)))

答案 3 :(得分:0)

我看了 dmitryro 的解决方案,我喜欢使用 lambda 根据条件显示不同的字符串。我还想考虑num_admin == 1的情况。我编辑了代码,我得到了这个:

l = lambda x:"No accounts" if x == 0 else ("accounts" if x > 1 else "account")

然后我又编辑了一下print语句:

print("[*] {} {} with administrative privileges found".format(num_admin, l(num_admin)))

我必须添加另一个占位符{}来显示数字,我在num_admin函数中添加了另一个参数format()

现在它几乎完美但仍有问题:

示例:

num_admin = 1我得到:[*] 1 account with administrative privileges found

num_admin == 2我得到:[*] 2 accounts with administrative privileges found

但对num_admin == 0我得到:[*] 0 No accounts with administrative privileges found

我想避免在句子前面显示数字0,无论如何,我认为我的生活变得复杂,而且仍然可以接受。此外,我应该将可读性视为一个重要方面。

我再次看了星期五的答案,它实际上解决了这个问题:

我认为其实

print("[*] {} account{} with administrative privileges found.\n".format("No" if num_administrators == 0 else str(num_administrators), "s" if num_administrators != 1 else ""))

似乎是一个完美的单行,虽然我同意可读性可能是一个问题。它肯定不符合PEP 8: line too long (175 > 79 characters).

我也喜欢这个解决方案,因为它避免使用lambda并使用条件表达式,我认为它更简单。

请参阅此处以获取参考:

- Conditional expressions

- Is there an equivalent of C’s ”?:” ternary operator?