使用python

时间:2017-01-27 00:00:14

标签: python csv

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

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

    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
    

    提前致谢!

1 个答案:

答案 0 :(得分:0)

根据您需要的内容构建列表,而不必担心订单。然后在它们上使用random.shuffle

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)

您可以打印两个变量list1list2,以验证它们是否符合要求的参数。

当选择相似或不同的对时,我假设50%-50%。

为了便于理解,我没有编写更短的代码(故意)。

从那里,您只需打印您的csv。