【问题标题】:Change conditions using loop and array in python在python中使用循环和数组更改条件
【发布时间】:2017-09-16 06:51:32
【问题描述】:

我在 python 中有旧脚本,在

if __name__ == '__main__': <br>

我们称函数的参数。如果它的参数等于某个字符串,我们应该调用函数。 旧代码。

if sys.argv[1] == 'add':
    sys.exit(add(db, usr))
if sys.argv[1] == 'rem':
    sys.exit(rem(db, usr))
if sys.argv[1] == 'rmusr':
    sys.exit(rmusr(db, usr))

第一次想到“switch case”,但是我怎么发现,python没有。我试图循环和排列。 我可以用它吗?抱歉,我在 2 小时前开始学习 python。但这很有趣,我希望你能帮助我。

 actions = ['add','rem','rmusr']
    for a in actions:
    if sys.argv[1] == 'a':
        sys.exit(a(db, usr))

正确吗?我如何发现,我们不应该用“$”调用变量。请帮忙。

【问题讨论】:

  • if sys.argv[1] == 'a': 行将用户输入与字符 a 进行比较。我不认为这是你想要的。尝试删除单引号,以便将 argv[1] 与变量 a 的值进行比较,而不是字符 'a'。

标签: python arrays python-3.x for-loop if-statement


【解决方案1】:

使用字典:

actions = {'add': add, 'rem': rem, 'rmusr': rmusr}

try:
    sys.exit(actions[sys.argv[1]](db, usr))
except KeyError:
   pass
   # or whatever you need to do for an invalid action

【讨论】:

    【解决方案2】:

    您可以将函数添加到字典中,然后使用用户输入的字符串来检索函数:

    actions = {
        'add': add,
        'rem': rem,
        'rmusr': rmusr,
    }
    
    action = sys.argv[1]
    
    if action in actions:
        sys.exit(actions[action](db, usr))
    

    【讨论】:

    • 但是我的方式呢?它不应该工作吗?如果我想使用循环?
    • 您的示例将函数变量 (a) 与类似的字符串 ('a') 混合在一起:它们不一样。无需添加循环,因为我的示例中的 in 运算符完成了您需要的所有检查。
    【解决方案3】:

    您的代码可能是正确的,但上面有错字。

    actions = ['add','rem','rmusr']
    for a in actions:
        if sys.argv[1] == 'a':
            sys.exit(a(db, usr))
    

    我认为最好用在:

    actions = ['add','rem','rmusr']
    if sys.argv[1] in actions:
        sys.exit(sys.argv[1](db, usr))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-08-14
      • 1970-01-01
      • 2021-10-09
      • 2012-05-20
      • 1970-01-01
      • 1970-01-01
      • 2016-01-28
      • 1970-01-01
      相关资源
      最近更新 更多