我认为我最大的问题是我不知道如何提出我正在寻找的问题。
我从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
。这表明在纯文本中它与人眼完全相同,但计算机正在将其视为不同的东西。我试图使它成为一个字符串因为这个并使它成为一个整数导致错误。我真的被卡住了,我确信它是如此简单,但我只是没有看到它。任何帮助,将不胜感激。即使这只是我找到答案的正确方向的一个点。
答案 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()
缩进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,5
,而correct
是字符串3,5\n
而不是字符串{{1} }}
如果您阅读the documentation for input,则应明确3,5
为何错误。它试图将我的answer
解释为Python表达式,这是编写元组3,5
的一种非常有效的方法,这就是我得到的原因。要解决此问题,您需要使用(3, 5)
。
如果您阅读the documentation for readlines,应该清楚为什么每一行最后都有换行符。有很多方法可以解决这个问题。
修复后,它最终仍然失败,因为它永远不会创建它试图删除的文件raw_input
和table.txt
。无论你想做什么,你似乎都错过了什么。我刚刚评论了这些内容。
当您接触它时,我会将pocket.txt
/ open
/ readlines
更改为更现代的Python模式,使用close
并将文件视为只是一个字符串迭代器。像with
这样的硬编码路径不是一个好主意。
无论如何,我不想给出所需的确切更改,因为这感觉就像是家庭作业,但我认为以上是足够的信息让你自己解决,并希望了解如何调试下一个问题靠自己。如果您仍然有问题,请离开。