我正在尝试制作一个 secret 圣诞老人程序。理想情况下,程序应询问至少三个名称,然后程序询问是否还有更多名称。如果是,请打开另一个文本字段并将其添加到名称列表中。如果不是,则中断循环,创建一个单独的列表,其中包含名称,打乱第二个名称列表,并将它们与原始列表中的名称配对。
例如,如果 John、Elliot、Sarah 和 Jenny 输入他们的名字,程序将他们的名字打乱,它应该输出如下内容:
[('John', 'Sarah'), ('Elliot', 'John'), ('Sarah', 'Jenny'), ('Jenny', 'Elliot')]
但我得到的却是这样的:
[('John', 'John'), ('Elliot', 'John'), ('Sarah', 'Elliot'), ('Jenny', 'Jenny')]
代码如下:
import sys
import random
names = []
class Santa:
#The class that takes the values, shuffles them, pairs and then displays them
def __init__(self, name):
self.turns = name
self.people = names
self.final = []
def sort_names(self):
random.shuffle(self.people)
for name in self.turns:
pair = (name, random.choice(self.people))
if pair[0] == [1]:
pair = (name, random.choice(self.people))
else:
self.final.append(pair)
def print_name(self):
input("\nNames are ready! Press Enter to show the names.")
print(self.final)
def main():
# The function asking for user input
name = input("\nType in your name. ")
names.append(name)
name = input("\nType in the next name. ")
names.append(name)
name = input("\nType in the next name. ")
names.append(name)
while True:
next = input("\nIs this everyone? Y/N ")
if next.upper() == "Y":
break
elif next.upper() == "N":
name = input("\nType in the next name. ")
names.insert(0, name)
else:
print("\nInvalid response, please try again.")
print(names)
start = Santa(names)
start.sort_names()
start.print_name()
input("\nRecord these, and press enter to quit.")
sys.exit()
main()
最佳答案
你不需要整个类(class)来设置它,我已经尝试清理一些阅读输入。
import random
names = []
for _ in range(3):
name = input("\nType in your name. ")
names.append(name)
while True:
next = input("\nIs this everyone? Y/N ")
if next.upper() == "Y":
break
elif next.upper() == "N":
name = input("\nType in the next name. ")
names.insert(0, name)
else:
print("\nInvalid response, please try again.")
print(names)
random.shuffle(names)
pairs = [(first_person, second_person) for first_person, second_person in zip(names, names[1:] + [names[0]])]
print(pairs)
关于python - 有没有一种方法可以将数组的内容配对,然后可以自行删除? ( secret 圣诞老人计划),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59229563/