1

いつも助けようとしているすべての人に感謝することから始めたいと思います。それから、英語は私の主要言語ではないので、言語についてもお詫びしたいと思います!

スクリプトを使用できないので、何が悪いのだろうか。

テキスト ファイル 1 (「q1.txt」) から次のテキスト ファイル (「q2.txt」) に移動することを期待していました。

しかし、そうではありません。I または 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()         

--

こんにちは、

私が受け取ったすべての応答に感謝します。説明してみます。

スクリプトは、指定されたテキスト ファイルから質問を取得します。これらは、テキスト ファイル内で 1 行ごとに「,」で区切られています。質問と回答の例がテキスト ファイルに表示されます: パーティーでは、多くの人と交流しますか?, A: 見知らぬ人を含む, B: 知っている少数の人と交流する

AまたはBを選択するたびに、A+1またはB+1の「スコア」が得られます。

すべての質問に回答すると、手紙にどのように回答したかに基づいて取得されます。これはうまくいきます。このタスクを実行するスクリプトに問題はありません。

問題は、関数内でそれ以上進まず、2 番目のテキスト ファイルに進まないことです。

つまり、q1.txt から q2.txt です。質問 ('q1.txt') 質問 ('q2.txt')

答えが出ると止まります。あなたの最初の性格コードは: E または あなたの最初の性格コードは: I

これが私が求めていることのより良い説明であることを願っています。改めまして、どうもありがとうございました。

4

1 に答える 1

0

この行はコード問題ですが、入力と出力の例がないと問題を診断するのは困難です。

for questions in fileName:

fileNameこの行は、反復ごとに 1バイトを読み取り、それを に配置しquestionsます。ほとんど確実に必要なのは、ファイルを 1 行ずつ読み取ることです。その方法については、ファイルとストリームに関する 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ます。

おそらく必要なのは、最初のifステートメントをforループ内に移動することです。覚えておいてください: Python のインデントはオプションではありません。

于 2012-11-21T19:04:30.063 に答える