2014-10-26 50 views
0

我正在製作一個程序來收集用戶的信息,並將其添加到文本文件。 這是一個將用於從一些申請人獲得所述信息的程序。
對於我收集的結果的線性,我想隨機提問。{Python}使用迭代生成唯一整數

我在問什麼是從列表中拉出問題的方法,要求輸入,將輸入存儲在文本文件中,然後再問問題列表中的另一個問題。
這是到目前爲止我的代碼:

def ques(): 
global quesnum 
for i in questions: 
    num = int(random.randint(0,len(questions)-1)) 
    j = int(numbers.count(str(num))) 
    while j >= 1: 
     num = int(random.randint(0,len(questions)-1)) 
     ##DEBUG ONLY## 
     print('true') 
     break 
    else: 
     num = str(num) 
     numbers.append(num) 
     ##DEBUG ONLY## 
     print('false') 
    num = int(num) 
    answer = input(str(quesnum) + '. ' + questions[num] + ': ') 
    answers.write(str(quesnum) + '. ' + questions[num] + ': ') 
    answers.write(answer + '\n') 
    quesnum = int(quesnum + 1)  

錯誤:

一旦數字已經被使用它被添加到列表中。 如果已經使用了一個號碼,理想的情況是生成一個新號碼並使用該號碼。
我看不到我的代碼中有任何錯誤,並且據我所見,它應該可以正常工作。
任何人都可以指出一個修復或建議一個更好的方法來做到這一點?我已經找到答案,建議使用random.sample(),但我已經嘗試過這一點,並且無法正常工作。

在此先感謝。

+1

我強烈建議不要使用'global',如果一個函數需要一個值作爲參數傳入它。 – IanAuld 2014-10-26 21:26:23

回答

0

您可以通過使用random.shuffle解決這個問題:

import random 

questions = ['Q1: ...', 'Q2: ...', 'Q3: ...'] 
random.shuffle(questions) 
for q in questions: 
    answer = raw_input(q + ': ') 
    with open("answers.txt", "a") as myfile: 
     myfile.write("{}: {}\n\n".format(q, answer)) 

這會打亂你的問題,要求他們以隨機順序,並將它們保存到一個文本文件。如果你想保存每個問題的更詳細的信息,這也將與一系列的詞典一起工作。例如。

questions = [ 
    {'nr.': 1, 'text': 'Do you like horses?'}, 
    {'nr.': 2, 'text': 'Where were you born?'} 
] 
+0

好的。所以'random.shuffle()'會改變我的列表的順序,然後我可以簡單地用'for i在問題中詢問他們:answer = input(questions [])'? – pythagon 2014-10-26 22:01:00

+0

正確。 'random.suffle()'會在你每次調用它時改變順序。只要你在迭代之前調用它*,你將得到不同的順序。 – 2014-10-26 22:05:15

+0

輝煌。問題解決了,非常感謝。 – pythagon 2014-10-26 22:16:53