如何在循环中创建这两个input()以避免不必要的许多input()行

时间:2018-01-11 17:12:43

标签: python python-3.x

我想输入多少受害者,然后能够输入每个受害者的姓名和年龄。

但我似乎无法围绕如何制作一个要求为每个受害者提供输入的循环。现在我输入一个输入,同样的输入被打印x次。

我可以看到它现在如何运作的逻辑,但我根本无法弄清楚如何做到这一点而不需要为" name"和#34;年龄"。

的5 x单独输入
num_victims = input("How many victims: ")

inc_numbr = 1
v_name = input(str(inc_numbr) + "." + " Victims " + "name: ")
v_age = input(str(inc_numbr) + "." + " Victims " + "age: ")
inc_numbr += 1

v_numbr = 1
v_one = (f"__Victim:__ \n"
         f"Name: {v_name}\n"
         f"Estimated age: {v_age} years old.\n\n")
v_numbr += 1
v_two = (f"__Victim " + str(v_numbr) + ":__\n"
         f"Name: {v_name}\n"
         f"Estimated age: {v_age} years old.\n\n")
v_numbr += 1
v_three = (f"__Victim " + str(v_numbr) + ":__\n"
           f"Name: {v_name}\n"
           f"Estimated age: {v_age} years old.\n\n")
v_numbr += 1
v_four = (f"__Victim " + str(v_numbr) + ":__\n"
          f"Name: {v_name}\n"
          f"Estimated age: {v_age} years old.\n\n")
v_numbr += 1
v_five = (f"__Victim " + str(v_numbr) + ":__\n"
          f"Name: {v_name}\n"
          f"Estimated age: {v_age} years old.\n")
v_numbr += 1

为输出格式示例添加:

__受害者:__

姓名:xxxxx

年龄:xxxx

__受害者2:__

姓名:xxxxx

年龄:xxxx

等..

2 个答案:

答案 0 :(得分:1)

您需要将其包装在for循环中:

number_of_victims = int(input("How many victims? "))
victim_names = []
victim_ages = []
for i in range(1, number_of_victims+1):
    victim_names.append(input("Name of victim "+str(i)+": "))
    victim_ages.append(input("Age of victim "+str(i)+": "))
print(victim_names, victim_ages)

请注意我是如何在victim_names循环之外创建victim_agesfor对象的,以便它们不会被覆盖。这些对象是列表 - 它们最初是空的,但我们append循环内的for数据。

如果你愿意,你可以使用字典对象代替受害者,但正如Alex F指出的那样,如果你有两个同名的受害者,这可能会导致数据被覆盖:

number_of_victims = int(input("How many victims? "))
victims = dict()
for i in range(1, number_of_victims+1):
    name = input("Name of victim "+str(i)+": ")
    age = input("Age of victim "+str(i)+": ")
    victims[name] = int(age)
print(victims)

将来,当遇到这样的问题时,您可能会发现编写伪代码很有帮助。这就像是一个计划代码的样子,而不必担心实际编写代码的语法和规则。例如,此问题的一些伪代码可能如下所示:

  • 询问受害者人数
  • 制作一个空对象来存储受害者信息
  • 重复这一次,因为有受害者:
    • 询问受害者的姓名
    • 询问受害者的年龄
    • 将受害者信息添加到对象
  • 显示对象的内容

在回答评论中的问题时,如何格式化打印,你可以这样做:

for v in range(number_of_victims):
    print("Victim ",str(v+1),":")
    print("Name:",victim_names[v])
    print("Age:",victim_ages[v])

答案 1 :(得分:1)

循环用于需要多次运行的代码,因此如果您需要一次询问受害者人数,然后输入多个nameage,则可以这样做:

number_of_victims = int(input("Enter the number of victims: "))
victims = []
for i in range(number_of_victims):
    name = input("Victim #{} name: ".format(i+1))
    age = input("Victim #{} age: ".format(i+1))
    victims.append([name, age])

通过这种方式,您可以获得一个列表,其中每个元素都是名称和年龄的列表。现在,您可以使用i访问文件号victims[i-1](因为列表索引从0开始)。

另一种选择是使用字典:

number_of_victimes = int(input("..."))
victims = {}
for i in range(number_of_victims):
    name = input("...")
    age = input("...")
    victims[i] = [name, age]

您可以使用i访问文件号victims[i-1](因为range也从0开始),但如果您编写for i in range(1, int(number_of_victims)+1):,则可以更改此项。现在每个字典键都是“人”索引(从1开始),而不是“计算机”索引(从0开始),因此您可以使用i访问相同的文件号victims[i]

或者,您可以创建一个字典,其中每个键都是受害者的名称,但如果您有两个相同的名称,则使用该名称添加的上一个键值对将被覆盖

number_of_victimes = int(input("..."))
victims = {}
for i in range(number_of_victims):
    name = input("...")
    age = input("...")
    victims[name] = int(age)