2016-02-26 2 views
0

Итак, я пытаюсь создать простую программу для устранения неполадок для мобильных телефонов и решений проблем, около 5 минут, и я не могу получить переданную строку 4, когда пользователь вводит модель телефона, он просто останавливается, а не продолжает диалог. Я понятия не имею, почему. Буду признателен за любую оказанную помощь. Также на линии 6 я хотел бы сделать так, чтобы, когда пользователь пишет строку текста о том, что не так с телефоном, он выбирает такие слова, как «сломал» «взломанный» «мокрый» и т. Д., Но я понятия не имею как снова, любая помощь очень ценится!Python: приложение для устранения неполадок с телефоном

brand = raw_input("Please state your phone brand. ") 
if brand.lower() == ("iphone"): 
    iphone = raw_input ("Please state the model. ") 
    if iphone.lower() == ("2G"): 
     iproblem2g = raw_input ("Please state your problem. ") 
     if iproblem2g.lower() == ("broken") or ("broke"): 
      ibroke = raw_input ("Is the hardware broken or the software? ") 
      if ibroke.lower() == ("hardware") or ("hard"): 
       print ("...") 
+0

Вам нужно отступать от линии 2. –

+0

@pp_ Я думаю, вы имеете в виду строку 3. К моему опыту текстовые редакторы не начинаются с 0. :) – zondo

+0

Хотя этот вопрос имеет отношение к другому вопросу, это не дубликат, а супер-набор. В этом коде есть много проблем, которые можно решить. – Xexeo

ответ

2

Было несколько проблем. Попробуйте следующее:

brand = raw_input("Please state your phone brand. ") 
if brand.lower() == ("iphone"): 
    iphone = raw_input ("Please state the model. ") 
    if iphone.lower() == ("2g"): 
     iproblem2g = raw_input ("Please state your problem. ") 
     if iproblem2g.lower() in ("broken", "broke"): 
      ibroke = raw_input ("Is the hardware broken or the software? ") 
      if ibroke.lower() in ("hardware", "hard"): 
       print ("...") 

Отступ очень важен для Python. Кроме того, «2G» никогда не соответствовало бы входному значению, поскольку входные значения уменьшаются. Наконец, сопоставление нескольких значений проще в списке или кортеже и не работало бы так, как было (всегда возвращалось бы True).

Почему всегда верно? Возьмем, например, if iproblem2g.lower() == ("broken") or ("broke"):. Это проверка iproblem2g.lower() == ("broken") ИЛИ ("broke"). ("broke") всегда будет True, так как считается Truthy value in Python, поэтому вся условная всегда будет True.

Cheers!

0

Эта линия, вероятно, семантически неправильно (то есть, он компилирует, но не работает, как вы ожидаете):

iproblem2g.lower() == ("broken") or ("broke") 

Вы на самом деле просят, если

(iproblem2g.lower() == ("broken")) or ("broke") 

, что означает

(iproblem2g.lower() == ("broken")) or True 

И это всегда будет True

Вы не можете проверить, является ли что-то «==» двумя вещами таким образом. Если вы хотите, чтобы сделать этот вид вопроса (это == Ь или является == с) вы должны использовать:

(iproblem2g.lower() == ("broken")) or (iproblem2g.lower() == ("broke")) 

или, более Pythonesc

iproblem2g.lower() in ["broken","broke"] 

Однако даже этот вопрос это не лучший выбор, потому что он будет соответствовать только совершенному слову «сломан» или «сломано», а не текстам, которые его содержат. Вероятно, будет гораздо лучше спросить:

"broken" in iproblem2g.lower() or "broke" in iproblem2g.lower() 

Таким образом, вы найдете слово в любом предложении.

Вы можете сделать это лучше, создав простую функцию, которая проверяет, является ли какой-либо из набора слов в предложении:

def check(words,sentence): 
    for word in words: 
     if word in sentence: 
      return True 
    return False 

Вы можете даже сделать некоторые предварительной обработки с использованием .lower() и. trim()

Наконец-то есть небольшой трюк, который вы не заметили: если «сломан» - это строка, «сломано» всегда будет (поскольку это подстрока), так что вам не нужно для проверки обоих.

+0

Он не заметил, потому что не искал его. Он смотрел на безразличное равенство. – zondo