2017-01-27 7 views
0

固定パラメータに部分的に基づいてユーザ入力に部分的に基づいて6行の.csvファイルを作成する必要があります。固定パラメータは問題ではありませんが、3つの変数があります。部分的にユーザ入力に基づいてPythonを使用してCSVファイルを生成する

  1. ファイルのすべての行に1から6の範囲の乱数(繰り返しはありません)を追加する必要があります。私はnp.random.choiceを使用してそれらの数値を作成し、すべてのループに1番目、2番目、3番目の[...]要素を行に追加するという考えを思いついたが、うまくいきません。
  2. ユーザは、2つ以上の変数(例えば、XまたはY)を連続して繰り返すかどうかを選択できる必要があります。例:ユーザー入力が「2」の場合、6行のうち2行に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 

感謝を!

答えて

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) 

あなたは、彼らが要求されたパラメータを満たす検証するために、2つの変数list1list2を印刷することができます。

私は、同じかまたは異なるペアを選択すると50%〜50%と仮定しました。

わかりやすいように短いコードを(目的に合わせて)書きませんでした。

そこから、あなたのcsvを印刷するだけです。

+0

ありがとうSci Prog。もう1つの質問:リスト1とリスト2の第1、第2、第3のリスト要素を選択し、それをループに追加するにはどうすればよいですか?私が念頭に置いておくべきこと:最初のループ - > list1とlist 2の最初のリスト要素を取り出し、行に追加 - > 2番目のループ - > 2番目の[...]。あなたの助けをもう一度ありがとう! – STD

+0

私はあなたの質問を理解するか分からない。 'for i in range(0,6): 'では、ループ変数を' list1'と 'list2'のインデックスとして使うことができます。これは配列から要素を削除しません。リストの最初の要素を取り出してリストから削除したい場合は、 'list1'と' list2'の両方で '.pop(0)'メソッド(pythonのドキュメントを参照)を使うことができます。 –

関連する問題