2012-11-21 39 views
1

我想首先感謝所有那些總是試圖幫助的人。 然後我也想爲語言道歉,因爲英語不是我的主要語言!我的Python代碼涉及循環和文件的行爲困惑

我不知道自從我無法使用我的腳本後,我做了什麼錯誤。

我希望它會從文本文件1('q1.txt')移動到下一個文本文件('q2.txt')。

但它沒有。沒有它留在我或E可能取決於回答問題。

將問題分成文本文件並用「;」分隔。 首先是問題,然後A和B

希望我設法解釋我的問題。 感謝您的幫助!

#!/usr/bin/env python 
# -*- coding: utf-8 -*- 
# name.py 



def questions(fileName): 
    fileName = open(fileName, 'r') 
    counter_a, counter_b = 0, 0 
    for questions in fileName: 
     lineSplit = questions.split(','); # for every new line, split separtes whit "," for one quastion and  two choides 
     question_string = "%s\n %s\n %s\n \n Answer: " % (lineSplit[0], lineSplit[1], lineSplit[2]) 
     answer = raw_input(question_string).lower() 
     while answer not in ("a", "b"): 
      print("Please choose A or B \n") 
      answer = raw_input(question_string).lower() 
    if answer == "a": 
     counter_a += 1 
    else: 
     counter_b += 1 

#print "A total is %d" % counter_a 
#print "B total is %d" % counter_b 


    if counter_a > counter_b: 
     print 'Your first personality code is: E' 
    else: 
     print 'Your first personality code is: I' 

def main(): 
    questions('q1.txt') 
    questions('q2.txt') 

if __name__=='__main__': main()   

-

你好,

感謝所有我所收到的答覆。我會盡力解釋。

該腳本從指定的文本文件中檢索問題。這些在每行的文本文件中除以「,」。 問題和答案的例子出現在文本文件中:在一個派對上,你是否與很多人交往?答:包括陌生人,B:與你知道的幾個人互動

每次你選擇A或B,你會得到A + 1或B + 1的「分數」。

一旦所有問題都得到解答,您就可以基於您如何回答信件。這很好。腳本執行此任務沒有問題。

問題是,它不會進一步在函數中,它不會去的第二個文本文件!

也就是說,從q1.txt到q2.txt。 問題('q1.txt') 問題('q2.txt')

得到答案後停止。 你的第一個人格代碼是:E 或 你的第一個人格代碼是:I

我希望這是對我之後的更好的解釋。再次,謝謝你。

+0

「q1.txt」exampel:在一個派對上,你是否與很多人互動?答:包括陌生人,B:與你知道的幾個互動 – akke

+0

「我不知道我做了什麼,因爲我無法使用我的腳本「。你有錯誤嗎?如果是這樣,錯誤是什麼?它正在運行,但不打印預期的輸出?如果是這樣,預期產出是多少,實際產出是多少? – Kevin

+0

真的不能得到你想要做的。當你說它應該從'q1.txt'移動到'q2.txt'時,你是什麼意思? –

回答

0

這條線是一個問題與您的代碼,儘管沒有實施例的輸入和輸出是困難的診斷問題:

for questions in fileName: 

這條線讀出fileName每次迭代單個字節,並把它放在questions。你幾乎可以肯定需要的是逐行讀取文件。請教關於文件和流的python文檔,以瞭解如何做到這一點(我不打算爲你做功課)。現在

,接下來發生的事情是這樣的:

answer = raw_input(question_string).lower() 
    while answer not in ("a", "b"): 
     print("Please choose A or B \n") 
     answer = raw_input(question_string).lower() 

但是,一旦你擁有了它,你不用做任何事情answer。您只需返回到for循環的頂部。一旦你在fileName使用了所有的字節,並退出循環,你打:

if answer == "a": 
    counter_a += 1 
else: 
    counter_b += 1 

if counter_a > counter_b: 
    print 'Your first personality code is: E' 
else: 
    print 'Your first personality code is: I' 

然後你退出功能。因此,最終的打印輸出由最後輸入的值answer確定。

您可能需要的是在for循環內移動第一個if語句。請記住:Python中的縮進是而不是可選。