python - 有没有一种方法可以将数组的内容配对,然后可以自行删除? ( secret 圣诞老人计划)

标签 python arrays python-3.x random

我正在尝试制作一个 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/

相关文章:

python - matplotlib 中的阴影图例线

python - 有没有办法在 Python 中获取对象的当前引用计数?

c++ - 为数组分配空间

java - 我的 Android ArrayList 只显示最后添加的值

python - 将一列值的总和除以数据框中所有行的计数

python : How to know serial port device events like keybord events

执行时间长的 Python Paramiko 超时,需要完整输出

C:读取文本文件并操作数据

python-3.x - Python 图像保存错误 - 从 e ValueError : unknown file extension: 引发 ValueError ("unknown file extension: {}".format(ext))

Python RAW 套接字解释数据字节