2016-02-12 2 views
0

Так что я изначально написал этот код как кучу операторов if/elif/else, чтобы набирать очки, чтобы выяснить, кто такой человек. Проблема заключалась в том, что я не мог понять, как заставить выражение else вернуться к исходному вопросу, поскольку этот вопрос был представлен только оператором variable = raw_input. Идея заключалась в том, чтобы сделать ее сложной для многих моих друзей. При исправлении исходной проблемы с помощью инструкции else я испортил часть добавления, чтобы определить ответ. Как я могу исправить это, чтобы на самом деле считать, как это происходит? Как вы можете видеть, я очень новичок в кодировании. Прошу прощения за основной вопрос, так как я уверен, что ответ очень прост. Я ценю любую помощь.Python добавление через if else и def

from sys import exit 


Tom = 0 
Jon = 0 
Chris = 0 


def question_a(): 
    q1 = raw_input("Hello there. I am going to try to guess who you are. Would you like to play?") 

    if q1 == "yes": 
     question_b() 
    elif q1 == "no": 
     print "Well f**k you too then" 
    else: 
     print "You should follow the rules." 
    question_a() 

def question_b(): 
    print "Do you have any hair?" 

    q1 = raw_input("> ") 

    if q1== "no": 
     print "you're Karl" 
     exit(0) 


    elif q1 == "yes": 
     Tom == Tom + 1 
     Chris == Chris + 1 
     Jon == Jon + 1 
     question_c() 
    else: 
     print "You should follow the rules." 
    question_b() 

def question_c(): 
    print "Do you enjoy working on cars?" 

    q1 = raw_input("> ") 

    if q1 == "yes": 
     Chris == Chris + 1 
     Jon == Jon + 1 
     question_d() 

    elif q1 == "no": 
     Tom == Tom + 1 
     question_d() 
    else: 
     print "you should follow the rules." 
    question_c() 

def question_d(): 
    print "Do you own a husky?" 

    q1 = raw_input("> ") 

    if q1 == "no": 
     Tom == Tom + 1 
     Chris == Chris + 1  
    elif q1 == "yes": 
     Jon == Jon + 1 
    else: 
     print "Hey you, follow the rules." 
    question_d() 

    # python guess_who2.py 

    for Tom > Jon and Tom > Chris: 
     print "You're Tom" 
    for Jon > Chris and Jon > Tom: 
     print "You're Jon" 
    for Chris > Tom and Chris > Jon: 
     print "You're Chris" 
question_a() 
+2

Вы перепутали гораздо больше. Из-за синтаксических ошибок эта программа не запускается. Я рекомендую инкрементное программирование: пишите несколько строк за раз. Получите тех, кто работает, прежде чем писать больше. Продолжайте это, пока не получите проблему, которую вы не можете решить. – Prune

+2

Вы использовали ** == ** вместо ** = ** для назначения. Ваши счетчики должны быть глобальными переменными, а не локальными. Вы делаете рекурсивные вызовы (функция, вызывающая себя) без особых причин. Вам действительно нужно исправить эти вещи, прежде чем вы сможете беспокоиться о своей логике подсчета. В конце вы используете ключевое слово ** для ** для принятия решения; это должно быть больше ** если ** заявления. – Prune

ответ

0

Делают это так:

from sys import exit 


def question_a(tom=0, jon=0, chris=0): 
    q = '' 
    while q not in ['yes', 'no']: 
     q = raw_input("Hello there. I am going to try to guess who you are. Would you like to play?") 

     if q == "yes": 
      question_b(tom, jon, chris) 
     elif q == "no": 
      print "Well f**k you too then" 
     else: 
      print "You should follow the rules." 


def question_b(tom=0, jon=0, chris=0): 
    print "Do you have any hair?" 

    q = '' 
    while q not in ['yes', 'no']: 
     q = raw_input("> ") 

     if q == "no": 
      print "you're Karl" 
      exit(0) 
     elif q == "yes": 
      tom = tom + 1 
      chris = chris + 1 
      jon = jon + 1 
      question_c(tom, jon, chris) 
     else: 
      print "You should follow the rules." 


def question_c(tom=0, jon=0, chris=0): 
    print "Do you enjoy working on cars?" 

    q = '' 
    while q not in ['yes', 'no']: 
     q = raw_input("> ") 

     if q == "yes": 
      chris = chris + 1 
      jon = jon + 1 
      question_d(tom, jon, chris) 

     elif q == "no": 
      tom = tom + 1 
      question_d(tom, jon, chris) 
     else: 
      print "you should follow the rules." 


def question_d(tom=0, jon=0, chris=0): 
    print "Do you own a husky?" 

    q = '' 
    while q not in ['yes', 'no']: 
     q = raw_input("> ") 

     if q == "no": 
      tom = tom + 1 
      chris = chris + 1 
     elif q == "yes": 
      jon = jon + 1 
     else: 
      print "Hey you, follow the rules." 

    # python guess_who2.py 

    if tom > jon and tom > chris: 
     print "You're tom" 
    if jon > chris and jon > tom: 
     print "You're jon" 
    if chris > tom and chris > jon: 
     print "You're chris" 

    if raw_input('Play again? (yes or no)') == 'yes': 
     question_a() 
    else: 
     print 'bye.' 

if __name__ == '__main__': 
    question_a() 

Попробуйте прочитать некоторые основной синтаксис Python на первый, так что вы можете справиться с Условный оператор легко.

+0

И спасибо вам! Я проверю различия между вашим кодом и мелалонсо и попытаюсь понять их. –

1

Надеюсь, вы наслаждаетесь миром программирования :) Я внесла некоторые изменения в ваш код, чтобы заставить его работать, я прокомментирую их.

from sys import exit 


Tom = 0 
Jon = 0 
Chris = 0 


def question_a(): 
    q1 = raw_input("Hello there. I am going to try to guess who you are. Would you like to play?") 

    if q1 == "yes": 
     question_b() 
    elif q1 == "no": 
     print "Well f**k you too then" 
    else: 
     print "You should follow the rules." 
     question_a() 

def question_b(): 
    global Tom, Chris, Jon 
    print "Do you have any hair?" 

    q1 = raw_input("> ") 

    if q1== "no": 
     print "you're Karl" 
     exit(0) 


    elif q1 == "yes": 
     Tom = Tom + 1 
     Chris = Chris + 1 
     Jon = Jon + 1 
     question_c() 
    else: 
     print "You should follow the rules." 
     question_b() 

def question_c(): 
    global Tom, Chris, Jon 
    print "Do you enjoy working on cars?" 

    q1 = raw_input("> ") 

    if q1 == "yes": 
     Chris = Chris + 1 
     Jon = Jon + 1 
     question_d() 

    elif q1 == "no": 
     Tom = Tom + 1 
     question_d() 
    else: 
     print "you should follow the rules." 
     question_c() 

def question_d(): 
    global Tom, Chris, Jon 
    print "Do you own a husky?" 

    q1 = raw_input("> ") 

    if q1 == "no": 
     Tom = Tom + 1 
     Chris = Chris + 1 
    elif q1 == "yes": 
     Jon = Jon + 1 
    else: 
     print "Hey you, follow the rules." 
     question_d() 

# python guess_who2.py 
question_a() 
if Tom > Jon and Tom > Chris: 
    print "You're Tom" 
elif Jon > Chris and Jon > Tom: 
    print "You're Jon" 
elif Chris > Tom and Chris > Jon: 
    print "You're Chris" 

В каждой из функций (question_a(), question_b() ..) вызов функции должен быть с отступом в заявлении еще для того, чтобы спросить снова только в том случае, ответ не есть нет нет.

else: 
    print "You should follow the rules." 
    question_a() 

В функциях, где вы хотите изменить переменные Tom, Chris или Jon, нужно указать Python, что с помощью линии

global Tom, Chris, Jon 

Если вы хотите увеличить точки переменной вы сделать это следующим образом:

Tom = Tom + 1 
Chris = Chris + 1 
Jon = Jon + 1 

, потому что если вы пишете что-то вроде

Tom == Tom + 1 

Вы создаете логическое выражение, которое даст вам значение True или False.

Наконец

question_a() 
if Tom > Jon and Tom > Chris: 
    print "You're Tom" 
elif Jon > Chris and Jon > Tom: 
    print "You're Jon" 
elif Chris > Tom and Chris > Jon: 
    print "You're Chris" 

Мы начинаем выполнение путем вызова функции question_a() (как вы уже знаете) и проверьте пункты, используя если таковые выражения. Операторы для используются для создания циклов (повторяя фрагмент кода X раз)

+0

Спасибо!Сегодня я должен усовершенствовать код и исследовать изменения, чтобы лучше понять их в будущем. Я ценю это. –

+0

Удивительно, им повезло и наслаждайтесь! – melalonso