Невозможно рандомизировать список с классами внутри него Python 2.7.4 - PullRequest
0 голосов
/ 06 мая 2018

Я новичок в кодировании и мне нужна помощь. Я пытаюсь рандомизировать эти комнаты или «сцены» в текстовом приключении, но всякий раз, когда я пытаюсь рандомизировать их, они даже не появляются, когда я запускаю их! Вот скрипт:

from sys import exit
import time
import random
#import another file here to use in this

class Scene(object):
    def enter(self):
        print "Not yet configured."



class Start():

    def start(self):
        print "Hello. How are you? You are about to play a game that is set in a crazy world."
        print "We are creating your profile right now."
        epic = raw_input("Enter your name here: ")
        print "Hello, %s." % epic
        print "You are being transported to a randomly generated world. Try to survive as long as possible."
        print "Here's some advice, %s: Don't die. Make the right choice. Be careful." % epic
        print "The rules will be shown to you soon."
        print "LOADING..."
        time.sleep(1)
        return Rules().rules()

class Rules(Scene):

    def rules(self):
        print ""
        print "-------------"
        print ""
        print "These are the rules:"
        print "1: Be a good sport. This game takes skill and memory to be able to win, so try your best to succeed."
        print "2: Every time you die, you do not get to respawn, so you will be prompted to either just not play anymore"
        print "or play again. If you decide to play again, you will most likely be on a new world with a new puzzles."
        print "3: Finally, have fun. Hopefully this game brings you joy, so have a great time playing it."
        return random.choice(the_shuffler)

class BoilerRoom(Scene):

    def boiler_room(self):
        print "You are in the boiler room."

class Kitchen(Scene):

    def kitchen(self):
        print "You are in the kitchen."

class Pool(Scene):

    def pool(self):
        print "You are in the pool."

class TennisCourts():

    def tennis_courts(self):
        print "You are in the tennis courts."

class SoccerField():

    def soccer_field(self):
        print "You are on the soccer field."

class Map(object):

    scenes = {
        Rules(): 'rules',
        BoilerRoom(): 'boiler_room',
        Kitchen(): 'kitchen',
        Pool(): 'pool',
        TennisCourts(): 'tennis_courts',
        SoccerField(): 'soccer_field'
    }

the_shuffler = (BoilerRoom, Kitchen, Pool, TennisCourts, SoccerField)

Start().start()

Ответы [ 2 ]

0 голосов
/ 06 мая 2018

Каким-то образом у вас неправильный синтаксис. Вы создаете словарь с class -инстанциями как клавишами и strings как значениями .

Если вы хотите вызывать функции / классы случайным образом, вы должны назначить имя переменной для каждой функции, рандомизировать порядок этих имен и вызвать возвращаемую функцию, применив к ней ().

Если вы хотите использовать классы или функции в качестве значений вашего dict, это не имеет большого значения - для классов вы также должны каким-то образом хранить, какой метод вызывать (или просто печатать класс и кодировать рабочий str () за это).

Мой пример использует функции напрямую:

def a():
    print "a"

def b():
    print "b" 

def c():
    print "c"

def d():
    print "d"

def e():
    print "e"



import random


# you would have to incoporate this somewhere into your program logic.
# probably calling it from Rules() - somehow. 

def menu():
    # map functions to keys
    #     "a"   is a string, the name for a function
    #     a     is the function
    #     a()   calls the function, as does options["a"]() 
    options = { "a" : a,  "b" : b,  "c" : c,  "d" : d,  "e" : e}

    # get all possible names
    listOfKeys = list(options.keys())

    # shuffle in place into random order
    random.shuffle(listOfKeys)

    # visit them in this order
    for r in listOfKeys:  
        options[r]() # get function-value from the dict and () it 


print "First try:" 
menu()

print "\n\nSecond try:"
menu()

Выход:

First try:
e
c
d
a
b


Second try:
b
c
a
e
d

Ссылка на документ для random.shuffle ()

Почему использование классов здесь принесет пользу вашему коду, мне неясно ...

0 голосов
/ 06 мая 2018

Вам необходимо вызвать метод класса, возвращаемого random.choice(the_shuffler).

Было бы полезно, если бы у каждого класса был метод описания, названный одинаково.

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