2017-11-25 11 views
0

私は学校のためのクイズ・コードを書いています。このコードはテキストファイルを繰り返し処理し、そこから質問と回答を読み込みます。ユーザは、クイズを行う難易度を選択します。回答の選択肢の数は難易度によって異なります。私は各質問と可能な答えをカンマでテキストファイルに分割しました。ストリップ・パイソン

from random import shuffle 

file = open("maths.txt" , "r") 
for line in file: 
    question = line.split(",") 
    print(question[0]) 
    if difficulty in ("e", "E"): 
     options = (question[1], question[2]) 

    if difficulty in ("m", "M"): 
     options = (question[1], question[2], question[3]) 

    if difficulty in("h", "H"): 
     options = (question[1], question[2], question[3], question[4]) 

    options = list(options) 
    shuffle(options) 
    print(options) 

    answer = input("Please enter answer: ") 

    if answer in (question[1]): 
     print("Correct!") 
    else: 
     print("incorrect") 
    file.close() 

これは、テキストファイルの行は次のようになります。? 質問1. 4 + 5は何ですか、9,10,20,11

最初のオプション(質問[1] )は常に正解になるので、オプションをシャッフルしたいと思います。このコードでは、オプションは大括弧、改行文字、および引用符で出力されます。誰も私がこれらを取り除く方法を知っていますか?私は使用しようとした:line.split(",").strip()しかし、これはまったく何もしないようだ。ありがとう

+1

期待される出力は何ですか? ( "m"、 "M" "): ' – bhansa

+0

' line.split( "、")。strip() 'はエラーを発生させ、何もしません。 .txt'のように見えますか? –

+0

コードブロック内の質問に追加してください。 –

答えて

3

問題はlistオブジェクトを印刷しようとしていることです。代わりに、各オプションを表示する必要があります。あなたはおそらく、より良い、それを中心にいくつかの書式を印刷することがしたい:

for option_num, option in enumerate(options): 
    print("{} - {}").format(option_num, option) 

右から文字を削除する.rstrip("put text to remove here")を使用して、文字列から文字を削除するには、ここで

1
for option in options: 
    print(option) 
+0

どこかで '.strip()'が必要です –

+0

@Blurp上記のカンマと括弧は実際にはPythonのリストを印刷する方法から来ていると私は思っています。ストリップが必要でした –

+0

最後のオプションに改行を付ける必要はないでしょうか?オプションには先頭と末尾の空白が含まれる可能性があります。だから私は上記のファイルを読むために 'csv'モジュールを使うことを提案したのです。 –

1

が起こる正確に理解するのに約enumerateformatをお読みください文字列の最後から文字を削除するには.lstrip("text to remove")を使用します。

2

これは何か?

from random import shuffle 
def maths_questions(): 
    file = open("maths.txt" , "r") 
    for line in file: 
    question = line.strip().split(",") # every line in file contains newline. add str.strip() to remove it 
    print(question[0]) 

    if difficulty in ("e","E"): 
     options = [question[1],question[2]] 
    elif difficulty in ("m","M"): 
     options = [question[1],question[2],question[3]] 
    elif difficulty in("h","H"): 
     options = [question[1],question[2],question[3],question[4]] 
    # why to create tuple and then convert to list? create list directly 

    shuffle(options) #shuffle list 
    print("Options: ", ", ".join(options)) # will print "Options: opt1, opt2, opt3" for M difficulty 

    answer=input("Please enter answer: ") 

    if answer in (question[1]): 
      print("Correct!") 
    else: 
     print("Incorrect, please try again...") 
    file.close() 

Python docs

str.join(iterable)

戻り反復可能で文字列を結合した文字列。バイトオブジェクトを含む、iterableに文字列以外の値がある場合、TypeErrorが送出されます。要素間のセパレータは、このメソッドを提供する文字列です。