将这一组if语句转换成某种清晰的形式

2024-10-02 12:37:35 发布

您现在位置:Python中文网/ 问答频道 /正文

嗯,我想弄清楚如何把我的if语句小簇缩短成更短的东西。你知道吗

这是我尝试做的一个小版本。你知道吗

import sys

v1 = "1"
v2 = "2"


if sys.argv[1] == "any" and sys.argv[2] == "any":
        print "nofliter"

elif sys.argv[1] == v1 and sys.argv[2] == v2:
        print "filtering both"

elif sys.argv[1] == v1 and sys.argv[2] == 'any':
        print "filtering half"

这相当令人困惑。但我希望有人能通过阅读得到我想要做的事情。到目前为止,我只设置了2个变量,但当我完成了我可能会设置超过8。你知道吗

基本上,如果某件事情没有定义,那么任何事情都是好的。你知道吗

示例:

if varible1 == 80 and varible2 == 100:
   print "something"

if varible1 == anything and varible2 == 230:
   print "something"

我不知道我的pesudo代码是否有意义,但那只是其中的一部分。你知道吗


Tags: andifsysany语句事情somethingv2
2条回答

如果我正确理解你的目标,你可以这样写:

possible_values = (1, 2, 3, 4) # put the acceptable values of arguments here

if (sys.argv[1] in possible_values and sys.argv[2] in possible_values):
  print("filtering both")
elif (sys.argv[1] in possible_values or sys.argv[2] in possible_values):
  print("filtering half")
else:
  print("nofilter")

如果这不是你想做的,请解释更多。你知道吗

使用带有frozenset键的字典:

params_dict = {frozenset(('any',)): 'nofilter',
              frozenset(('1', '2')): 'filter both', 
              frozenset(('any', '1')): 'filter half', 
              frozenset(('any', '2')): 'filter half',
              ....
              }

params_descr = params_dict.get(frozenset(sys.argv[1:3]))

if params_descr is not None:
    print(params_descr)

相关问题 更多 >

    热门问题