2017-01-07 3 views
-1

Итак, я создаю ИИ, который в основном фиксирует чувства, которые у вас есть; например, давайте скажем, что он спросил, как вы поживаете, и вы говорите Super Good, и это не в «словаре ai», тогда он спросит вас, хорошо это или нет. Но им не удается с проверочной программы я сделал:Преподавание Python Ai Feelings Trouble

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" 

и это меня раздражает. Если у вас есть какие-либо предложения или какой-либо способ оптимизации, все ответы будут очень благодарны!

+3

'file.readlines()' всегда возвращает список. Ни «0», ни «1» не являются списком, поэтому ни одно из этих условий не является истинным. – DyZ

+0

ОК? И что? в основном говоря: «Угадайте число между 1-1000, но его не 2» – Censored

+0

Почему у вас есть эти утверждения 'if'? Что вы пытаетесь выполнить с ними, напечатав «ok» или «wow»? – blacksite

ответ

-1

Здесь есть два отдельных вопроса. Во-первых, вы используете файл 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 характер для того, что вы делаете.)

Во-вторых, ваш, если/Элиф блок будет возвращать только что-то, если то, что он проверяет, равен 0 или 1, а не, например, «foo». Возможно, вы захотите добавить окончательный вариант для управления случаем по умолчанию.

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

'if 'foo' == 0' is всегда False, и поэтому '' foo '== 1'. – DyZ

+0

В этом суть. Это пример, призванный показать, почему вам может понадобиться другое.Я мог бы настроить его как переменное сравнение, но точка обучения такая же. В случае OPs он сравнивает значение с 0 и 1 и удивляется, когда ничего не происходит. –

0

Следующий фрагмент должен работать:

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") 
Смежные вопросы