Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/342.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
教授Python Ai会让人感到麻烦_Python_If Statement_Text - Fatal编程技术网

教授Python Ai会让人感到麻烦

教授Python Ai会让人感到麻烦,python,if-statement,text,Python,If Statement,Text,所以我制作了一个人工智能,基本上记录了你的感受;比如说它问你做得怎么样,你说超级好,它不在“人工智能字典”里,然后它会问你这是好是坏。但是我做的检查程序有问题: def pyaisetup(): open("PyAiEmotions.txt", "r+") file = open("PyAiEmotions.txt", "r+") file.writelines('This project is all about teaching an ai about learnin

所以我制作了一个人工智能,基本上记录了你的感受;比如说它问你做得怎么样,你说超级好,它不在“人工智能字典”里,然后它会问你这是好是坏。但是我做的检查程序有问题:

def pyaisetup():
    open("PyAiEmotions.txt", "r+")
    file = open("PyAiEmotions.txt", "r+")
    file.writelines('This project is all about teaching an ai about learning emotions\n')

    open("PyAiGoodEmotions.txt", "r+")
    file = open("PyAiGoodEmotions.txt", "r+")
    file.writelines('Good Emotions:\n')

    open("PyAiNeutralEmotions.txt", "r+")
    file = open("PyAiNeutralEmotions.txt", "r+")
    file.writelines('Neutral Emotions:\n')

    open("PyAiBadEmotions.txt", "r+")
    file = open("PyAiBadEmotions.txt", "r+")
    file.writelines('Bad Emotions:\n')




open("PyAiWriteCheck.txt", "r+")
file = open("PyAiWriteCheck.txt", "r+")
if (file.readlines() == '0'):
    print "ok"
elif (file.readlines() == '1'):
    print "wow"
因此,程序写入1或0取决于之前是否运行过程序,但我的程序只是完全跳过了:

if (file.readlines() == '0'):
        print "ok"
    elif (file.readlines() == '1'):
        print "wow"

这让我很恼火。如果您有任何建议或任何方式来优化这一切的答复将不胜感激

这里有两个不同的问题。第一个事实是您两次使用file.readlines(),第二个事实是您有一个带有两个检查的条件,但有些情况会忽略不计

如果我有一个包含三行的文件
abc.txt
,0、1、2,那么我会得到这种行为

In [1]: file = open('abc.txt', 'r+')

In [2]: first_lines = file.readlines()

In [3]: first_lines
Out[3]: ['0\n', '1\n', '2']

In [4]: second_lines = file.readlines()

In [5]: second_lines
Out[5]: []
相反,您应该将数据取出一次,放入一个单独的变量中并使用它

In [1]: with open('abc.txt', 'r+') as f:
   ...:     lines = f.readlines()
   ...:

In [2]: lines
Out[2]: ['0\n', '1\n', '2']
然后,您可以对此进行检查(注意,您可能需要删除所做操作的
\n
字符)

其次,if/elif块只会在它检查的是0或1时返回某些内容,而不是其中的一部分,例如“foo”。您可能需要放置一个最终的else来管理默认案例

foo = "foo"
if foo == 0:
    print('first')
elif foo == 1:
    print('second')
else:
    print('default')

以下片段应该可以工作:

content = file.readline().strip()
if content == '0':
    print("ok")
elif content == '1':
    print("wow")
else:
    print("error")
但是,您可以仅使用文件的存在或不存在来指示程序是否在之前运行。函数
os.path.isfile(“PyAiWriteCheck.txt”)
检查文件是否存在

最后,您可以使用异常处理:

try:
    open("PyAiWriteCheck.txt", "r")
    print("ok")
except:
    print("wow")

file.readlines()
始终返回列表。“0”和“1”都不是列表,因此这些条件都不是真的。确定吗?然后呢?你基本上是说“猜一个介于1-1000之间的数字,但不是2”,为什么你有那些
if
语句?通过打印“ok”或“wow”,您试图用它们实现什么?我是说
file.readlines()=='0'
是False,
file.readlines()=='1'
也是False。您应该改用
file.readline()
。但是如果调用两次,第一个将读取文件内容,第二个将不读取任何内容(空行)。另外,请记住,
file.readline()
并没有去掉
“\n”
。我只是为了一个占位符而把文本放在那里。1和0的工作方式是,有一个文本文件,其中放置了一个默认数字0,然后程序运行,如果它检测到0,即if(file.readlines()=“0”):那么pyaisetup()将运行,并将新值设置为1,然后当程序重置时,它将看到程序已经运行,因此它不会重新运行pyaisetup()
,如果'foo'==0
始终为False,那么
'foo'==1
也是如此。这就是重点。这是一个示例,旨在说明您可能需要else的原因。我可以将其调整为可变比较,但教学点是相同的。在OPs案例中,他将一个值与0和1进行比较,当什么都没有发生时,他会感到惊讶。