使用python部分基于用户输入生成csv文件

使用python部分基于用户输入生成csv文件,python,csv,Python,Csv,我需要创建一个包含六行的.csv文件,部分基于用户输入,部分基于固定参数。虽然固定参数不是问题,但有三个变量是 我需要在文件的每一行中添加一个范围从1到6的非重复随机数。我想到了使用np.random.choice创建这些数字,并在每个循环中将第一、第二、第三[…]元素添加到行中的想法,但它不起作用。 用户应该能够选择两个变量e。GX或Y在一行中重复或不重复。例如:如果用户输入为“2”,则6行中的两行必须包含X、X或Y、Y,如果输入为0,则所有行都不应包含X、X或Y、Y。老实说,我不知道如何编写

我需要创建一个包含六行的.csv文件,部分基于用户输入,部分基于固定参数。虽然固定参数不是问题,但有三个变量是

我需要在文件的每一行中添加一个范围从1到6的非重复随机数。我想到了使用np.random.choice创建这些数字,并在每个循环中将第一、第二、第三[…]元素添加到行中的想法,但它不起作用。 用户应该能够选择两个变量e。GX或Y在一行中重复或不重复。例如:如果用户输入为“2”,则6行中的两行必须包含X、X或Y、Y,如果输入为0,则所有行都不应包含X、X或Y、Y。老实说,我不知道如何编写类似的代码。 这是到目前为止我的代码

import csv
import numpy as np

t_delay = input("xxx:")
t_target = input("xxx:")
rndTrial = np.random.choice(6, 6, replace=False) # Problem 1
X_Y = input("xxx:") # Problem 2

with open('test.csv', 'w', newline = '') as my_csv:
    writer = csv.writer(my_csv, delimiter=',', quotechar='|')
    writer.writerow(['Head1', 'Head2', 'Head...'])

    for lazy in range(0, 6):
        writer.writerow([60, 12 , t_delay, t_target, X, Y, rndTrial]
如果用户选择具有相同X或Y变量的3行,则所需的.csv文件应如下所示:

fixed, fixed, user_input, user_input, problem2, problem2, random_number
60,12,t_delay,t_target,X,X,1
60,12,t_delay,t_target,X,Y,2
60,12,t_delay,t_target,Y,X,3
60,12,t_delay,t_target,X,X,4
60,12,t_delay,t_target,Y,Y,5
60,12,t_delay,t_target,X,Y,6

提前谢谢

在每个列表中列出您需要的内容,而不必担心顺序。然后对它们使用random.shuffle

您可以打印两个变量list1和list2,以验证它们是否满足请求的参数

在选择相似或不同的配对时,我假设为50%-50%

我并不是故意为了更容易理解而写更短的代码


从这里开始,您只需打印您的csv。

谢谢您的Sci程序。最后一个问题:如何选择list1和list2的第一个、第二个、第三个[…]列表元素,并将其添加到lazy in range0、6的循环中?我想到的是:第一个循环->获取列表1和列表2的第一个列表元素,并将其添加到行->第二个循环->获取第二个[…]。再次感谢你的帮助!我不确定我是否理解你的问题。对于范围为0,6的for i:可以使用循环变量作为list1和list2的索引,这不会从数组中删除元素。如果要获取列表的第一个元素并将其从列表中删除,可以使用.pop0方法查看列表1和列表2上的python文档。
from random import shuffle, random

list1 = [ 1, 2, 3, 4, 5, 6]   # integers 1 to 6, without repeating
shuffle(list1)

nb_same = 3         # this can come from user input, must be in 0..6
list2 = []
for i in range(nb_same):
  list2.append( 'X,X' if random() < 0.5 else 'Y,Y' )
while len(list2) < 6:
  list2.append( 'X,Y' if random() < 0.5 else 'Y,X' )
shuffle(list2)