带while循环的Python作业打印输出

时间:2018-07-12 21:47:20

标签: python python-3.x while-loop

我正在尝试学习“ while”循环和计数器。我了解如何在基本级别上使用它们,但是我觉得在这种情况下我已经用不完了,可能会有更好的初学者答案,仍然使用while循环和if / elif / else语句。

基本上,程序应该基于从0开始的计数器打印句子中的每个句子,然后打印句子1,然后在第4个句子之后打印合唱...然后继续打印接下来的4个句子,然后再打印合唱最后两次。

这就是我现在的位置,但是就像我提到的那样,我觉得我已经结束了使用while循环,使其变得更简单,并且感觉像是在作弊。

ver1 = ['sentence1', 'sentence2', 'sentence3', 'sentence4']
ver2 = ['sentence5', 'sentence6', 'sentence7', 'sentence8']
chor1= ['chorus1', 'chorus2']

counter = 0

while counter == 0:
    print(ver1[0])
    counter += 1

while counter == 1:
    print(ver1[1])
    counter += 1

while counter == 2:
    print(ver1[2])
    counter += 1

while counter == 3:
    print(ver1[3])
    counter += 1

#this if statement was my decision just to see if I could use it properly, but I'd like to do the entire thing with while loops if possible....but using if/elif/else statements isn't forbidden.     
if counter >= 5:
    print(ver1[3])
else:
    print(chor1[0])

我用if语句开始创建它,但是老师问我是否要尝试使用while循环作为作业分配...这是我写的原始if / elif / else语句。

verse1 = "I came home and my dog was gone"
verse2 = "She took my dog and my truck"
verse3 = "oh no she didn't"
chorus = "ohh how times have changed"

truck = 'gone'
dog = 'gone'

if dog == "gone":
    print (verse1)
    print (chorus)
else:
    print(verse3)

if truck == 'gone':
    print (verse2)
    print (chorus)
else:
    print (verse3)

这只是程序的第一部分,因为我不想继续进行下去,如果有更好的答案,我不愿意浪费时间,而只是复制/粘贴while循环并进行一些小的编辑以确定要打印的内容。

3 个答案:

答案 0 :(得分:3)

  

这就是我现在的位置,但是就像我提到的那样,我觉得我已经结束了使用while循环,使其变得更简单,并且感觉像是在作弊。

实际上,您过度使用了while循环,使其变得更加复杂。

让我们跟踪您的代码:

counter = 0

while counter == 0:
    print(ver1[0])
    counter += 1

首次点击该while时,counter将为0,因此它将运行一次。然后,您将`counter增加到1,这样它就不会再次运行。

因此,这与您退出while循环并仅编写以下代码具有相同的效果:

print(ver1[0])
counter += 1

与下一个循环相同:

while counter == 1:
    print(ver1[1])
    counter += 1

这将始终只运行一次,因此您不需要循环。

其余的依次类推。

这意味着当您到达循环末尾时,counter将始终为4

因此,您可以将所有代码替换为:

print(ver1[0])
print(ver1[1])
print(ver1[2])
print(ver1[3])
counter = 4

或者,您也可以利用while来避免重复四遍,就像这样:

counter = 0
while counter < 4:
    print(ver1[counter])
    counter += 1

尽管确实如此,使用for语句可能会更好:

for counter in range(4):
    print(ver1[counter])

或者,甚至更好:

for ver in ver1:
    print(ver)

这些方法中的任何一个都可以扩展为以不同的方式处理不仅仅是verse-1行:

counter = 0
while counter < len(ver1):
    print(ver1[0])
    counter += 1
counter = 0
while counter < len(chor1):
    print(chor1[counter])
    counter += 1
# etc.

…或…

all_lines = ver1 + chor1 + ver2 + chor1
counter = 0
while counter < len(all_lines):
    print(all_lines[counter])
    counter += 1

…或…

for line in ver1:
    print(line)
for line in chor1:
    print(line)
# etc.

…或…

for part in (ver1, chor1, ver2, chor2):
    for line in part:
        print(line)

…或…

all_lines = ver1 + chor1 + ver2 + chor1
for line in all_lines:
    print(line)

…,或者,如果您真的希望您的老师知道您与全班其他学生相距太远,或者上交了您在互联网上不了解的代码,……

import itertools
print(*itertools.chain(ver1, chor1, ver2, chor1), sep='\n')

答案 1 :(得分:1)

因为这是家庭作业,所以我不会给您代码。在这里使用while循环实际上是反直观的,但是可以。

如果计数器为0/1/2/3,则相反。否则,如果它是4,9,10,就很麻烦。否则,如果其5/6/7/8为verse2。因此,您可以在while循环中使用3个if语句进行while循环,以适应不同情况。因此,每次在while循环中,您都要检查3种情况,然后增加计数器。

如果要使用4个while循环,

abarnert有一个很好的解决方案。但是,您可以在一个while循环中使用我写的内容,但是您将需要IF语句。

答案 2 :(得分:0)

感谢大家的帮助。我终于让它以正确的输出正常运行,尽管我觉得我仍然在第一节经文中将计数器重置为0有点作弊。但是也许因为这只是我的第二节课所以可以接受。我很确定我没有必要,但是我不知道如何在不重置计数器的情况下使用print(ver2 [counter])。否则,由于ver2是一个不同的变量,并且ver2的列表条目的索引从0开始,因此我会收到“列表索引超出范围”错误。

ver1 = ['sentence1', 'sentence2', 'sentence3', 'sentence4']
ver2 = ['sentence5', 'sentence6', 'sentence7', 'sentence8']
chor1= ['chorus1', 'chorus2']

counter = 0

while counter < 4:
    print(ver1[counter])
    counter += 1

if counter == 4:
    print(chor1[0])
    counter += 1

counter = 0

while counter < 4:
    print(ver2[counter])
    counter += 1

if counter == 4:
    print(*chor1, sep = "\n")
#I googled around a bit to find a way to print the items in chor1 with a 
#line return so it lined up with the rest instead of printing side by 
#side
#I do see now where @abarnert showed the sep = "\n" to return the line
#though I missed it in all the code options listed.