Python: функция не будет работать при установке значения - PullRequest
0 голосов
/ 25 августа 2018

Я пытаюсь создать очень простую ветвящуюся историю, используя класс под названием Choices и мой основной.Выбор содержит методы для каждого сделанного выбора, и у каждого ответвления есть свой собственный метод, чтобы держать вещи организованными.Мой главный оценивает предыдущий выбор, чтобы решить, что делать дальше.Все возвращается;но методы не будут запускаться при установке в переменную!Все, на что я смотрел, было о более продвинутых программах;Моя простая ошибка, которая нуждается в исправлении.Если бы кто-нибудь мог сказать мне, почему, я был бы очень благодарен!

main.py:

import Choices

game = Choices.Choices()

reply = game.c()

if reply == "1":
  reply = game.c1()
elif reply == "2":
  reply = game.c2()

Choices.py:

class Choices:
  answer = False

  #Constructor
  def __init__(self):
    self.answer = False

  #Initial Choice
  def c(self):
    while self.answer == False:

      print "What would you like to do?" #Question
      reply = input("[1] Wake up [2] Sleep in") #Answers

      if reply == "1": #Choices
        print "You get up." #Actions
        self.answer = True
        return reply

      elif reply == "2": #Choices
        print "You sleep more." #Actions
        self.answer = True
        return reply

      else:
        print "Not a choice."
        self.answer = False

    self.answer = False

  #Branch 1
  def c1(self):
    while self.answer == False:

      print "What would you like to do?" #Question
      reply = input("[1] Make Breakfast [2] Get Dressed") #Answers

      if reply == "1": #Choices
        print "You go to the kitchen and make some oatmeal." #Actions
        self.answer = True
        return reply

      elif reply == "2": #Choices
        print "You go to the closet and put on some day clothes." #Actions
        self.answer = True
        return reply

      else:
        print "Not a choice."
        self.answer = False

    self.answer = False

  #Branch 2
  def c2(self):
    while self.answer == False:

      print "What would you like to do?" #Question
      reply = input("[1] Wake up [2] Dream") #Answers

      if reply == "1": #Choices
        print "You get up." #Actions
        self.answer = True
        return reply

      elif reply == "2": #Choices
        print "You begin to dream. You are wandering in a forest, when you come to a crossroads..." #Actions
        self.answer = True
        return reply

      else:
        print "Not a choice."
        self.answer = False

    self.answer = False

Ответы [ 2 ]

0 голосов
/ 25 августа 2018

Проблема возникает из-за того, что вы используете функцию input и предполагаете, что ее возвращаемое значение является строкой.

Это не так в случае Python 2.x

Прочтите ответ , чтобы понять больше.

0 голосов
/ 25 августа 2018

Я изменил ваш код Choices.py

class Choices:
    answer = False

    #Constructor
    def __init__(self):
        self.answer = False

    #Initial Choice
    def c(self):
        self.answer = False
        while True:
            print "What would you like to do?" #Question
            reply = raw_input("[1] Make Breakfast [2] Get Dressed") #Answers

            if str(reply) == "1": #Choices
                print "You get up." #Actions
                self.answer = True
                return reply

            elif reply == "2": #Choices
                print "You sleep more." #Actions
                self.answer = True
                return reply

            else:
                print "Not a choice."


    #Branch 1
    def c1(self):
        self.answer = False
        while True:
            print "What would you like to do?" #Question
            reply = raw_input("[1] Make Breakfast [2] Get Dressed") #Answers

            if reply == "1": #Choices
                print "You go to the kitchen and make some oatmeal." #Actions
                self.answer = True
                return reply

            elif reply == "2": #Choices
                print "You go to the closet and put on some day clothes." #Actions
                self.answer = True
                return reply

            else:
                print "Not a choice."

    #Branch 2
    def c2(self):
        self.answer = False
        while True:
            print "What would you like to do?" #Question
            reply = raw_input("[1] Make Breakfast [2] Get Dressed") #Answers
            if reply == "1": #Choices
                print "You get up." #Actions
                self.answer = True
                return reply

            elif reply == "2": #Choices
                print "You begin to dream. You are wandering in a forest, when you come to a crossroads..." #Actions
                self.answer = True
                return reply

            else:
                print "Not a choice."

Первая проблема заключается в том, что input,

raw_input() обрабатывает весь ввод как строку и возвращает тип строки.

input() имеет свои особенности при работе с чисто числовым вводом и возвращает тип введенного числа (int, float).

Вы не можете сравнить Intergerс string.

Вторая проблема - когда вы заканчиваете один метод и переходите к c1 или c2, он не запустится, потому что перед вами return reply ваш ответ всегда будет True,Таким образом, в следующем методе while self.answer == False равен while False, и он просто ничего не будет делать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...