我有一个程序用于枚举具有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.
如果有一个或多个管理员,则要显示的消息几乎相同,唯一的区别是根据号码显示account
或accounts
。这只是一个字母(s
)的问题。
我是否可以通过使用唯一的声明或以更简单的方式实现条件打印?
是否可以打印如下内容:
print("[*] {} account".format(num_administrators) + if num_administrators > 1 "s" + "with administrative privileges found:\n")
不介意我上面的代码,我不知道语法,如果我正在做的事情有意义,它只是让你知道我在想什么,你可以告诉我它是否可行
此外我正在调用函数show_admins()
3次(用于打印管理员帐户)但实际上我可以在最后调用它一次。
答案 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并使用条件表达式,我认为它更简单。
请参阅此处以获取参考: