【问题标题】:How to fetch values from if else condition?如何从 if else 条件中获取值?
【发布时间】:2019-09-19 18:35:54
【问题描述】:

我正在尝试使用 if else 条件获取代码。我希望从 if else 条件中获取值。

目前 if 条件有效,不适用于 else 条件。

mname=input("Enter  name: ")
    m=[]

        if mname=="CS1TFD22" or "cs1tfd22":
            mcode='CS122S003'
            if l1l2=="NULL":
                icode = 'CS122S003d13_mh_'
            elif l1l2!="NULL":
                icode = 'CS122S003d13_L1_mh_'

        else:
            for i in mname:
                m.append(i)

            mcode = 'CS1'+m[5]+m[6]+'S003'
            if l1l2=="NULL":
                icode='CS1'+m[5]+m[6]+'S003d113_mh_'
            elif l1l2 != "NULL":
                icode = CS1'+m[5]+m[6]+'S003d13_L1_mh_'

        print(mcode,icode)

如果 mname 不是 'CS1TFD22',我得到的输出总是 mcode='CS122S003' 和 icode='CS122S003d13_L1_mh_'。例如,如果我输入 mname 作为 CS1TFD23 ,那么 icode 应该是 'CS123S003' 而 icode 应该是 'CS123S003d13_mh'

else条件下如何工作?

【问题讨论】:

  • 这肯定是错误的if mname=="CS1TFD22" or "cs1tfd22":,应该是if mname in ("CS1TFD22" ,"cs1tfd22"):
  • 代码应该做什么?请在您的代码中也包含该解释!
  • 像这样更正你的第一个 if 语句if mname=="CS1TFD22" or mname=="cs1tfd22":

标签: python python-3.x if-statement conditional-statements


【解决方案1】:

代替

if mname=="CS1TFD22" or "cs1tfd22":

使用

 if mname=="CS1TFD22" or mname=="cs1tfd22":

【讨论】:

  • 或者你也可以使用 casefold()
  • 这是正确的。 "cs1tfd22" 总是计算为 True,因此永远不会遇到 else 条件
【解决方案2】:

您的 if 语句始终评估 true,因为您评估的是字符串的逻辑真/假。你应该使用

if mname=="CS1TFD22" or mname=="cs1tfd22":

if mname in ("CS1TFD22","cs1tfd22"):

【讨论】:

  • 您永远不会选择哪个字符是大写或小写。所以最好使用 casefold()
  • 实际上我什至没有注意到它们在不同的情况下是相同的字符串!在那种情况下是的,绝对应该使用 casefold()
【解决方案3】:

您的代码中有一些错误

  1. 您不是通过if mname=="CS1TFD22" or "cs1tfd22": 而是通过if mname=="CS1TFD22" or mname=="cs1tfd22": 检查两个或条件,您也可以通过if mname.lower()=="cs1tfd22": 来简化此操作。

  2. 您不需要if l1l2=="NULL": 中的额外elif,只需else 即可。

  3. 您错过了icode = CS1'+m[5]+m[6]+'S003d13_L1_mh_' 中的单引号
  4. 您尚未在任何地方定义 li2,不确定您从哪里获取它,所以我将其作为代码中的输入

包含所有这些问题的代码可能看起来像这样

mname=input("Enter name: ")
l1l2=input("Enter l1l2")
m=[]

#Convert mname to lower case and then compare
if mname.lower() == 'cs1tfd22':
    mcode='CS122S003'

    #If-else case 1
    if l1l2=="NULL":
        icode = 'CS122S003d13_mh_'
    else:
        icode = 'CS122S003d13_L1_mh_'

else:
    for i in mname:
        m.append(i)
    mcode = 'CS1'+m[5]+m[6]+'S003'

    # If-else case 1
    if l1l2=="NULL":
        icode='CS1'+m[5]+m[6]+'S003d113_mh_'
    else:
        icode = 'CS1'+m[5]+m[6]+'S003d13_L1_mh_'

print(mcode,icode)

您的代码的一些输出将是。

Enter name: cs1tfd22
Enter l1l2:  NULL
CS122S003 CS122S003d13_mh_

Enter name: abcdefgh
Enter l1l2:  NULL
CS1fgS003 CS1fgS003d113_mh_

Enter name: xyzabcd
Enter l1l2:  HELLO
CS1cdS003 CS1cdS003d13_L1_mh_

【讨论】:

  • ` 如果 mname.lower()=="CS1TFD22":` 这是错误的,你也可以简化这个,应该是mname.upper()
  • 该死!我把它正确地放在代码中,但在示例中却不正确!我在两个地方都纠正了它们!谢谢@Netwave 请再看一遍,如果看起来不错,请考虑投票
  • 现在好了,gj :)
  • 什么是 gj!我不知道这个!
  • 啊该死的!仍在学习 SO 的原理,所以任何反馈都会受到赞赏@Netwave 尤其是像你这样的高级用户:)
【解决方案4】:
  • 您应该定义 l1l2 变量。
  • 使用 else 代替 elif。
  • 不要忘记最后一行 CS1 前的 ' 标记。

    mname=input("Enter  name: ")
    m=[]
    l1l2=input("Enter  l1l2: ")
    
    if mname=="CS1TFD22" or "cs1tfd22":
        mcode='CS122S003'
        if l1l2=="NULL":
            icode = 'CS122S003d13_mh_'
        else:
            icode = 'CS122S003d13_L1_mh_'
    else:
        for i in mname:
            m.append(i)
    
        mcode = 'CS1'+m[5]+m[6]+'S003'
        if l1l2=="NULL":
            icode='CS1'+m[5]+m[6]+'S003d113_mh_'
        else:
            icode = 'CS1'+m[5]+m[6]+'S003d13_L1_mh_'
    
    print(mcode,icode)
    

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-10-07
    • 2019-04-25
    • 1970-01-01
    • 1970-01-01
    • 2019-12-28
    • 2012-10-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多