如何根据用户输入多次提出一组问题?

时间:2018-09-24 18:51:55

标签: python python-3.7

使用Python 3.7。我正在尝试根据对象的尺寸来收集信息,但是在确定正确的语法时遇到了麻烦。

目标是询问有多少个对象以及每个对象的长度和宽度是多少。这是我到目前为止的内容:

num_of_objects = int(input("Enter the number of objects:"))
a = 1

while a <= num_of_objects:
    length = input("Enter length of object:")
    width = input("Enter width of object:")

截至目前,尽管有num_of_objects输入,它仍在似乎是无限循环的情况下输出此结果:

Enter the number of objects: 4 
Enter length of object: 
Enter width of object:

我想问的是一些类似的东西:

Enter the number of objects: 4 
Enter length of object 1: 
Enter width of object 1:
Enter length of object 2:
Enter width of object 2:
Enter length of object 3:
Enter width of object 3:
Enter length of object 4:
Enter width of object 4:

我尝试了许多尝试,但都没有成功。

3 个答案:

答案 0 :(得分:1)

首先编写逻辑而不是代码。当逻辑有意义时,就可以将逻辑转换为代码。

那么您如何编写逻辑?您需要一个算法

  

在数学和计算机科学中,算法是如何解决一类问题的明确说明

https://en.wikipedia.org/wiki/Algorithm

因此,让我们编写一种算法来描述您要编写的程序:

  1. 向用户询问多个对象,并将结果另存为num_objects
  2. 对于每个对象,向用户询问对象的长度和宽度

还不错吧?让我们写一些代码!

“等等,”您可能会问-“我从哪里开始?”

很好的问题。让我们首先布局我们想要的程序结构:

def main():
    num_objects = ask_num_objects()
    object_sizes = ask_object_sizes(num_objects)

好的,这似乎是我们算法的最小但合理的实现。

让我们实施ask_num_objects

def ask_num_objects():
    return int(input("Enter the number of objects:"))

那很容易。您已经编写了该代码,我只是从您的问题文本中复制了它。

接下来,我们需要实现ask_object_sizes。这是您的代码中出现逻辑错误的地方。正如评论者指出的那样,您没有正确编写循环:

def ask_object_sizes(num_objects):
    sizes = []
    for i in range(num_objects)
        length = input("Enter length of object {}:".format(i))
        width = input("Enter width of object {}:".format(i))

        sizes.append((length, width))

    return sizes

花点时间确保您了解此代码的作用,以及为什么它与现有代码不同!

我们可以将所有内容汇总如下:

def ask_num_objects():
    return int(input("Enter the number of objects:"))

def ask_object_sizes(num_objects):
    sizes = []
    for i in range(num_objects)
        length = input("Enter length of object {}:".format(i))
        width = input("Enter width of object {}:".format(i))

        sizes.append((length, width))

    return sizes

def main():
    num_objects = ask_num_objects()
    object_sizes = ask_object_sizes(num_objects)

    # do something with object_sizes

答案 1 :(得分:0)

许多评论指出:您一直循环执行,直到a超过num_of_objects,但是您永远不会在循环内递增a

避免这种情况的常见用法是

for _ in range(num_of_objects):
    # do some stuff

range(x)(其中x是整数)创建一个生成器,该生成器生成数字集[0,x),其长度为x_中的for _ in ...仅表示我们忽略了循环索引(因为您现在也不使用它。

答案 2 :(得分:0)

您永远都不会更改a的值,可以通过像这样反复循环后简单地增加其值来解决此问题

while a <= num_of_objects:
    length = input("Enter length of object:")
    width = input("Enter width of object:")
    a += 1
Enter the number of objects:4
Enter length of object:1
Enter width of object:2
Enter length of object:1
Enter width of object:2
Enter length of object:1
Enter width of object:2
Enter length of object:1
Enter width of object:2

即使如此,我们也应该避免while循环,并使用for循环

for i in range(num_of_objects):
    length = input("Enter length of object:")
    width = input("Enter width of object:")