嵌套在“for”循环中的“if”循环无法按预期工作

2024-10-05 12:23:28 发布

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

长话短说,我要完成以下练习:

In Robert McCloskey’s book Make Way for Ducklings, the names of the ducklings are Jack, Kack, Lack, Mack, Nack, Ouack, Pack, and Quack. This loop tries to output these names in order.

Of course, that’s not quite right because Ouack and Quack are misspelled. Can you fix it?

给我的代码是:

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时,我希望它打印“ok”,否则打印“C”和“D”。 但结果是:

ABCD

如果删除最后一个打印命令,则不会打印输出。 怎么了?它看起来与我解决的问题非常相似,但仍然不能像我预期的那样工作。 我错过了什么? 谢谢你们,新年快乐


Tags: andthe代码inforifnamessuffix
3条回答

将字符串视为字符列表可能会有所帮助。对字符串进行迭代时,将得到每个字符:

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)

您将列表定义为字符串数组。使用l=“ABDC”只执行一次循环

正确的代码应该如下所示

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

在您的第一个代码中,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)

相关问题 更多 >

    热门问题