我正在尝试提供有关X号受害者的信息。 首先输入了多少受害者。 下一个输入" name"," age"和#34;社交媒体"为每个受害者。 最后将其全部写入文件。
受害者可以拥有超过1个Instagram帐户或超过1个Snapchat帐户,我希望能够输入Instagram 1,Instagram 2,Instagram 3等。为每个受害者并返回"菜单"为给定的受害者选择更多社交媒体帐户输入。
当我重复这个时,出了点问题。 FX。对于我添加的每个Instagram帐户,它不会计算+1。
此外,我无法为受害者2,3,4等输入社交媒体。它只是跳过它并结束脚本。
我可能接近这一切都错了,为什么我寻求帮助来学习正确的方法。 :)
# SOCIAL MEDIA
instagram = []
snapchat = []
twitter = []
youtube = []
other = []
social_media = True
# Get input of victims.
number_of_victims = int(input("How many victims: "))
confirm_social_media = input("\nAny social media? y or n: ")
victim_names = []
victim_ages = []
if confirm_social_media == "n":
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)
else:
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) + ": "))
while social_media != "":
social_media = input("\nType of social media: "
"\n'i' = Instagram"
"\n's' = Snapchat"
"\n't' = Twitter"
"\n'y' = Youtube"
"\n'o' = Other"
"\nOr blank for next")
snumbr = 1
if social_media == 'i':
iinput = input("Instagram " + str(snumbr) + ": ")
instagram.append(iinput)
elif social_media == 's':
sinput = input("Snapchat " + str(snumbr) + ": ")
instagram.append(sinput)
snumbr += 1
print(victim_names, victim_ages, instagram, snapchat)
# Write victims to file.
for v in range(number_of_victims):
target.write("__Victim " + str(v + 1) + ":__\n")
target.write("- Name: " + victim_names[v] + "\n")
target.write("- Estimated age: " + victim_ages[v] + " years old.\n\n")
target.write("- Instagram: " + instagram[v] + "\n")
target.write("- Snapchat: " + snapchat[v] + "\n")
答案 0 :(得分:1)
你犯了3个错误:
while
的{{1}}循环测试。这是第一次,因为您将social_media != ""
设置在顶部。但是你要求用户通过将输入留空来结束循环。您永远不会重置该设置,因此对于下一个受害者,social_media = True
仍然存在。
要么为每个受害者设置social_media = ""
不同的值,要么根本不使用标记,只需在请求输入后使用social_media
和,使用while True:
如果输入为空:
break
您将计数器设置为1 社交媒体循环。因此,对于每个社交媒体条目,您将计数器设置为1 。将计数器设置为1 外部循环:
while True:
social_media = input(...)
if not social_media: # empty
break
# ...
您只需在申请Snapchat帐户时增加号码。无论您要求的帐户是什么,都需要增加数字。
你的结构可能更好;你首先测试snumbr = 1
while ...:
# ask for social media
# done asking, increment
snumbr += 1
然后重复相同的confirm_social_media
循环有点奇怪。只需遍历受害者计数,并在该循环中 ,测试for
以运行或跳过社交媒体问题循环。
您真的想重新考虑您的打印策略,因为您的代码假设每个受害者只有一个Instagram和一个Snapchat帐户。情况并非如此,您需要为每个受害者创建社交媒体帐户的列表。
您应该为每个受害者使用字典,并将字典存储在列表中。使用单个confirm_social_media
列表,并在每个受害者循环中使用:
victims
然后遍历字典列表并打印出您收集的数据:
victim_data = {'number': i}
victim_data['name'] = input("Name of victim " + str(i) + ": ")
victim_data['age'] = input("Age of victim " + str(i) + ": ")
instagram = victim_data['instagram'] = []
snapchat = victim_data['snapchat'] = []
# collect social media in `instagram` and `snapchat`
victims.append(victim_data)