什么是嵌套循环以及如何在下面的示例中使用它?

What is a nested loop and how do I use it in example below?

我在开始 python 编码 class 时遇到了以下问题。我已经联系了教授,但他还没有回复我,这将在 3.5 小时内完成。如果有人 tutorial/guidance 知道如何开始,那就太棒了。我不希望任何人编写这段代码!我只需要一点指导!谢谢 :)

在Python中编写一个程序,提示用户输入10到3之间的整数和一个字符。然后使用这两个值显示一个框,使用输入的字符,框的大小由输入的数字决定。

这是一个示例输出:

Enter size of box:  4

Enter a character: %

%%%%

%%%%

%%%%

%%%%

这是另一个可能的输出:

Enter size of box:  3

Enter a character: &

&&&

&&&

&&&

您的程序只会 运行 一次,但您必须使用重复构造来使用输入的值绘制框。

提示:应该是嵌套循环。打印的每一行都是一个循环,因此您将在循环构造中有循环;嵌套循环。

和以前一样,您必须测试无效值,如果是,则显示错误消息并继续获取有效数字。

在这里使用你自己的测试值。

嵌套循环是循环中的循环

但是它是如何工作的?

执行外层循环语句,触发内层语句。然后内部循环 执行直到完成。

因此内部语句将继续执行,直到它满足您为其设置的语句。

然后,外循环再次触发内循环……一直触发内循环,直到外循环的语句被满足。

嵌套循环是循环中的循环。例如:

import sys

def main():
    size_of_box = 4
    character = "%"
    for i in range(0, size_of_box):
        for j in range(0, size_of_box):
            sys.stdout.write(character)
        sys.stdout.write("\n")

if __name__ == "__main__":
    main()

解决方案

让我们把问题分解成几个步骤。

  1. 首先,我们需要从输入中获取一个整数,并确保该整数是 310 或介于两者之间的任何数字。这就是 3 到 10 的含义。

  2. 然后我们需要向用户询问将用于打印框的单个字符。

  3. 得到整数和字符后,我们需要显示一个由字符组成的框,框的宽度和高度由整数决定。

对于第一步,我们需要获得用户的输入。这可以使用内置函数 input() 来完成。它采用可选提示作为参数,returns 输入作为字符串。所以让我们把它写下来:

integer = input()

太棒了。现在我们需要将输入转换为整数,以便它可以在我们程序的其余部分中使用。这可以使用内置函数 int() 来完成。我们将传递您的字符串,并将其转换为整数:

integer = int(input('Enter a number: '))

第二步是从用户那里获取角色。这很简单。我们将再次使用 input() 从用户那里获取单个字符。但由于输入需要是一个字符,我们不应该转换这个值:

character = input('Enter a character: ')

好的。这是我们目前所拥有的:

integer = int(input('Enter a number: '))
character = input('Enter a character: ')

最后一步是打印一个由值 character 组成的框,其宽度为 integer,高度为 integer。现在我们需要做的就是打印一行 integercharacters integer 次。这就是嵌套 for 循环的用武之地。

我们知道每一行的宽度必须是 integer。所以我们需要多次打印 character 。我们可以使用 range() 内置函数来做到这一点。我们传入 integer 作为参数,它将生成从 0integer:

的所有数字
for _ in range(integer):
    print(character, end="")

我们在 for 循环中使用下划线而不是实际可读变量名的原因是因为我们不需要使用 for 循环会给我们的值。我们只关心重复我们的代码。

end="" 部分告诉 print() 内置函数每次调用时不要打印换行符,因为我们希望所有字符都在一行中。 for循环之前的print()就是在我们的提示和程序输出之间加了一些space。让我们看看我们的程序到目前为止输出了什么:

Enter a number: 5
Enter a character: @

@@@@@
>>> 

太棒了。最后要做的是将每一行打印 integer 次。因为我们知道执行上面的for循环会打印一个行,所以我们只需要执行integer次就可以打印integer行。所以我们将那个 for 循环包裹在另一个 for 循环中,并使用 range() 来执行嵌套的 for 循环 integer 次。我们将再次使用 print(),在每行之间添加一个换行符:

print()
for _ in range(integer):
    for _ in range(integer):
        print(character, end="")
    print()

就是这样!完成了。让我们测试一下我们的程序:

Enter a number: 7
Enter a character: #

#######
#######
#######
#######
#######
#######
#######
>>> 

如您所见,我们得到了预期的输出。这是最终程序:

integer = int(input('Enter a number: '))
character = input('Enter a character: ')

print()
for _ in range(integer):
    for _ in range(integer):
        print(character, end="")
    print()

错误处理

您可能还需要实施错误处理。这意味着让您的程序从用户输入无效输入中恢复。在这种情况下,只有在我们要求用户输入整数时才能真正输入无效输入。我们需要:

  1. 确保用户输入了有效号码。并且
  2. 确保该数字是 310 或两者之间的任何数字。

为此,我们需要一个循环。这样我们就可以继续要求用户提供有效输入,直到他们这样做为止。我们可以使用 while True 循环。这意味着我们将继续循环,直到我们从循环中退出。

while True:

现在我们需要确保用户输入了一个有效的号码。我们可以使用 try/except 块。 try/except 块的工作方式是我们将一段代码放在 try 可能引发错误的端口中。如果没有出现错误,我们将正常继续程序。但是,如果出现错误,Python 将跳转到 except 块并执行其中的代码。

在我们的例子中,我们将尝试将用户输入转换为整数。如果失败,将引发 ValueError。所以我们需要捕获该错误消息并将其打印给用户:

while True:
    try:
        integer = int(input())
    except ValueError:
        print('Please enter a number')

剩下的就是测试输入的整数是否在正确的范围内。如果是这样,我们将中断循环并继续执行该程序。如果没有,我们将显示一条错误消息并重试。这是它的样子:

while True:
    try:
        integer = int(input('Enter a number: '))
        if integer >= 3 and integer <= 10:
            break
        print('Please enter a number between 3 and 10 inclusive')
    except ValueError:
        print('Please enter a number')

character = input('Enter a character: ')

print()
for _ in range(integer):
    for _ in range(integer):
        print(character, end="")
    print()

以上是完整程序的样子:

这是一个演示:

Enter a number: -23
Please enter a number between 3 and 10 inclusive
Enter a number: a
Please enter a number
Enter a number: 11
Please enter a number between 3 and 10 inclusive
Enter a number: 10
Enter a character: #

##########
##########
##########
##########
##########
##########
##########
##########
##########
##########
>>> 

有关程序中错误处理的更多资源,请参阅问题:Asking the user for input until they give a valid response