1

私の最大の問題は、私が探しているのが正確に何であるかを質問する方法がわからないことだと思います。

私はhttp://www.tuxradar.com/content/code-project-build-flash-card-appのフラッシュカードプログラムからほとんどのコードを盗み、自分のニーズに合うように少し変更しました。しかし、私が正しい答えを得るとき、それは私がそれを間違っていると言います。
これが私のコードです:

#!/usr/bin/env python
import os
import random
import time

file1 = open('/root/first.txt', 'w')
file2 = open('/root/second.txt', 'w')

file1.writelines('1\n2\n3\n4\n5')
file2.writelines('0,2\n1,3\n2,4\n3,5\n4,6')

time.sleep(1)

file1.close
file2.close

time.sleep(1)

file1 = open('/root/first.txt', 'r')
file2 = open('/root/second.txt', 'r')

count = 0
score = 0
tries = int(raw_input('How many tries?'))
start_time = time.time()

f1content = file1.readlines()
f2content = file2.readlines()

try:
    while count < tries:
        os.system('clear')

        wordnum = random.randint(0, len(f1content)-1)
        correct = str(f2content[wordnum])

        print 'Number:', f1content[wordnum], ''

        answer = input('\nSurrounding numbers?')

        if answer == correct:
            raw_input('\nCorrect! Hit enter...')
            score = score + 1
        else:
            print '\nNope, It\'s', correct
            raw_input('Hit enter to try a new one...')

        count = count + 1

except SyntaxError:
    print 'you must enter a value, starting over'
    os.system('./flash.py')

finally:
    file1.close
    file2.close
    os.system('rm /root/first.txt')
    os.system('rm /root/second.txt')

stop_time = time.time() - start_time
print '\nIt took you', stop_time / 60, 'minutes to get', score, 'out of', count, 'correct'

私の問題は35行目にあると仮定します。

correct = str(f2content[wordnum])

私がこれを考える理由は、それが私に与えて1、正しい答えが正しいことを知っていて0,2、それを入力すると、それはノー、それはだと言うから0,2です。これは、プレーンテキストでは人間の目とまったく同じですが、コンピューターがそれを別のものとして読み取っていることを示しています。このため、文字列にしようとしましたが、整数にするとエラーになります。私は本当に立ち往生していて、それはとても単純なものだと確信していますが、私はそれを見ていません。どんな助けでもいただければ幸いです。たとえそれが私が答えを見つけることができる正しい方向への単なるポイントであるとしても。

4

1 に答える 1

0

まず、上記のコメントにあるすべての問題を修正しました。

の代わりにwriteline、:を使用しwriteます

file1.write('1\n2\n3\n4\n5')
file2.write('0,2\n1,3\n2,4\n3,5\n4,6')

括弧をに追加しますclose

file1.close()
file2.close()

whileとの終わりの間のすべてをインデントしますtry

比較の前に以下を追加してデバッグします。

print repr(answer), repr(correct)

また、すべてを調べて、すべて/root/first.txtをただに変更したので、 (ほとんどのシステムでは機能しない)first.txtという名前の書き込み可能なディレクトリがないシステムで動作します。/root

だから、私がそれを実行すると、私はこれを見る:

Number: 4


Surrounding numbers?3,5
(3, 5) '3,5\n'

Nope, It's 3,5

Hit enter to try a new one...

明らかに、は文字列ではなくanswerタプルであり、文字列ではなく文字列です。(3, 5)3,5correct3,5\n3,5

入力用のドキュメントを読むと、なぜanswer間違っているのかが明確になります。私をPython式として解釈しようとしています。これ3,5は、タプルを作成するための完全に有効な方法(3, 5)であるため、私はそれを取得します。これを修正するには、を使用しますraw_input

readlinesのドキュメントを読むと、各行の最後に改行がある理由が明確になっているはずです。これを回避する方法はいくつかあります。

table.txtそれを修正しても、ファイルが作成されず、削除しようとするため、最後に失敗しますpocket.txt。あなたがそこで何をしようとしていたとしても、あなたは何かを逃したように見えます。それらの行をコメントアウトしました。

あなたがそれをしている間、私は//をより現代的なPythonパターンに変更し、openファイルを単なる文字列イテレータとして使用および処理します。そして、のようなパスをハードコーディングすることはあまり良い考えではありません。readlinesclosewith/root/first.txt

とにかく、これは宿題のように感じるので、必要な正確な変更を与えたくありませんが、上記はあなたがそれを自分で修正するのに十分な情報だと思います、そしてうまくいけばあなた自身で次の問題をデバッグする方法について少し学ぶことができます。それでも問題が解決しない場合は、遠慮なく質問してください。

于 2012-09-25T00:43:15.517 に答える