【问题标题】:"if" loop nested into a "for" loop does not work as expected嵌套在“for”循环中的“if”循环无法按预期工作
【发布时间】:2021-04-13 01:45:40
【问题描述】:

长话短说,我要完成这个练习:

在罗伯特·麦克洛斯基 (Robert McCloskey) 的《为小鸭子让路》(Make Way for Ducklings) 中, 小鸭是 Jack、Kack、Lack、Mack、Nack、Ouack、Pack 和 Quack。 此循环尝试按顺序输出这些名称。

当然,这不太对,因为 Ouack 和 Quack 拼写错误。你能解决它吗?

给我的代码:

prefixes = "JKLMNOPQ"
suffix = "ack"

for p in prefixes:
    print(p + suffix)

经过不同的尝试,我设法解决了这个问题:

prefixes = "JKLMNOPQ"
suffix = "ack"

for p in prefixes:
    if p=="O" or p=="Q":
        print(p + "u" + suffix)        
    else:            
         print(p + suffix)

对我来说,它看起来有点“硬编码”。您认为这是一个有效的解决方案吗?

然后我试着自己做一些类似的事情,只是为了理解。 于是我写了如下代码:

list=["ABCD"]
for l in list:
    if l =="A" or l=="B":
        print("ok")
    else:
        print(l)

基本上我希望它在 L 等于 A 或 B 和 L 时打印“ok”(所以“C”和“D”)否则。 但输出却是:

ABCD

如果我删除最后一个打印命令,则不会打印任何输出。 怎么了 ?它看起来与我解决的非常相似,但仍然无法按我的预期工作。 我错过了什么? 谢谢大家,新年快乐。

【问题讨论】:

  • 您好,您现在已经有了答案,您可以考虑accepting an answer 来奖励给您最有帮助的评论。

标签: python loops for-loop if-statement


【解决方案1】:

在您的第一个代码中,prefixes = "JKLMNOPQ" 是一个字符串,因此在对其进行迭代时,您将遍历其字符。但是随后list=["ABCD"] 它是一个元素列表,因此在对其进行迭代时,您只有一个元素 ABCD

values = "ABCD"
for l in values:
    if l in "AB":
        print("ok")
    else:
        print(l)

还可以将if p=="O" or p=="Q" 替换为if p in "PQ"。您也可以将if 直接放在 print 调用中

prefixes = "JKLMNOPQ"
suffix = "ack"
for p in prefixes:
    print(p + ("u" if p in "PQ" else "") + suffix)

【讨论】:

    【解决方案2】:

    将字符串视为字符列表可能会有所帮助。当你遍历一个字符串时,你会得到每个字符:

    for x in "myteststring":
        print(x)
    

    当你遍历一个列表时,你会得到每个元素。所以一个元素的列表,字符串"ABCD"看起来像["ABCD"],但是第一个元素是"ABCD",而不是"A"

    for x in ["myteststring"]:
        print(x)
    

    您可能想要的是遍历许多字符串的列表:

    for x in ["A", "B", "C", "D"]:
       print(x)
    

    【讨论】:

      【解决方案3】:

      您将列表定义为字符串数组。循环只会执行一次 l = "ABDC"

      正确的代码应该是这样的

      list="ABCD"
      for l in list:
          if l =="A" or l=="B":
              print("ok")
          else:
              print(l)
      

      【讨论】:

        【解决方案4】:

        它会打印 ABCD,因为您正在使用 list = ["ABCD"]。现在,当您遍历元素时,您的 L 将是“ABCD”。因此它将进入 else 块并打印 ABCD。

        ist="ABCD"
        for l in ist:
            if l =="A" or l=="B":
                print("ok")
            else:
                print(l)
        

        我已将“list”更改为“ist”,因为使用与内置函数相同的变量名称不是一个好习惯。

        【讨论】:

          【解决方案5】:

          除了上述所有有效答案之外,您还可以保持列表不变并在循环中获取其中的第一项:

          mylist=["ABCD"]
          for l in mylist[0]:
              if l =="A" or l=="B":
                  print("ok")
              else:
                  print(l)
          

          请避免使用 list 作为变量的名称,因为 list 是 python 中的关键字。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2015-02-20
            • 1970-01-01
            • 2018-01-26
            • 2020-12-27
            相关资源
            最近更新 更多