如何将readlines转换为字符串...也许?

时间:2012-09-25 00:22:35

标签: python

我认为我最大的问题是我不知道如何提出我正在寻找的问题。

我从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。这表明在纯文本中它与人眼完全相同,但计算机正在将其视为不同的东西。我试图使它成为一个字符串因为这个并使它成为一个整数导致错误。我真的被卡住了,我确信它是如此简单,但我只是没有看到它。任何帮助,将不胜感激。即使这只是我找到答案的正确方向的一个点。

1 个答案:

答案 0 :(得分: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()

缩进whiletry的结尾之间的所有内容。

通过在比较之前添加以下内容进行调试:

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,5,而correct是字符串3,5\n而不是字符串{{1} }}

如果您阅读the documentation for input,则应明确3,5为何错误。它试图将我的answer解释为Python表达式,这是编写元组3,5的一种非常有效的方法,这就是我得到的原因。要解决此问题,您需要使用(3, 5)

如果您阅读the documentation for readlines,应该清楚为什么每一行最后都有换行符。有很多方法可以解决这个问题。

修复后,它最终仍然失败,因为它永远不会创建它试图删除的文件raw_inputtable.txt。无论你想做什么,你似乎都错过了什么。我刚刚评论了这些内容。

当您接触它时,我会将pocket.txt / open / readlines更改为更现代的Python模式,使用close并将文件视为只是一个字符串迭代器。像with这样的硬编码路径不是一个好主意。

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