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

2024-04-27 00:29:43 发布

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

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

但我似乎不知道如何做一个循环,要求每个受害者的意见。现在我做一个输入,同样的输入被打印x次。你知道吗

我现在可以看到它的工作原理,但如果不为“name”和“age”分别输入5 x和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

等。。你知道吗


Tags: nameinputageoldinc姓名年龄受害者
2条回答

循环用于需要多次运行的代码,因此,如果您需要询问一次受害者的数量,但随后输入多个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])

这样就得到了一个列表,其中每个元素都是一个名称和年龄的列表。现在可以使用victims[i-1]访问文件号i(因为列表索引以0开头)。你知道吗

另一种选择是使用字典:

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

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

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

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

您需要将其包装在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)

注意我是如何在for循环之外创建victim_namesvictim_ages对象的,这样它们就不会被覆盖。这些对象是列表-它们最初是空的,但是我们在append循环中向它们提供数据。你知道吗

如果需要,您可以使用dictionary对象作为受害者,但正如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])

相关问题 更多 >