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, etc. 更改为 just 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,5correct是字符串3,5\n而不是字符串3,5

如果您阅读input 的文档,应该清楚为什么answer是错误的。它试图将 my 解释3,5为 Python 表达式,这是编写 tuple 的一种完全有效的方式(3, 5),所以这就是我得到的原因。要解决此问题,您需要使用raw_input.

如果您阅读readlines 的文档,应该清楚为什么每行末尾都有一个换行符。有很多方法可以解决这个问题。

修复了这个问题,它最终仍然失败,因为它永远不会创建文件table.txt并且pocket.txt它会尝试删除。无论你在那里试图做什么,你似乎都错过了一些东西。我只是注释掉了这些行。

当您使用它时,我会将open/ readlines/更改close为更现代的 Python 模式,with将文件用作字符串迭代器并将其视为字符串迭代器。硬编码路径之类/root/first.txt的并不是一个好主意。

无论如何,我不想给出所需的确切更改,因为这感觉像是家庭作业,但我认为以上信息足以让您自己修复它,并希望了解一些有关如何自己调试下一个问题的知识. 如果您仍然有问题,请离开。

于 2012-09-25T00:43:15.517 回答