Почему мой лист персонажа не работает с input () при попытке выбрать расу в текстовом приключении? python3.x - PullRequest
0 голосов
/ 12 ноября 2019

Так что это только начало длинной очереди вопросов, которые я знаю, которые у меня будут. В этом текстовом приключении мне бы хотелось, чтобы в конечном итоге были загадки и несколько путей ветвления, фракции, к которым вы можете в конечном итоге присоединиться, диалог выбора, который влияет на мораль ситуаций (например, массовый эффект или котор, но .. текст на основе), и т. Д., И т. Д., И т. Д. Но я чувствую, что ранняя настройка ОЧЕНЬ важна для этой учебной поездки. Я также хотел бы в конечном итоге преобразовать его в PYQT5 и, возможно, в конечном итоге разместить его с пользовательским интерфейсом на веб-сайте, который я создал для своего портфолио. Я просто хотел убрать это с дороги на случай, если ты увидишь меня здесь. Напишите мне совет на этот счет, если хотите (потому что я определенно мог бы воспользоваться помощью святого покровителя!).

Хорошо, так что проблема под рукой:

У меня естьСписок рас на выбор:

races = ['Human', 'Dwarf', 'Elf', 'Dragonborn', 'Tiefling', 'Half-Elf']

Я бы хотел попросить игрока «Выбрать расу». После того, как игрок напечатает, что он хочет играть, он спросит: «Вы уверены?»| Вот где я застрял |Если игрок говорит «да», это завершает программу, и я могу попытаться продолжить создание этого приложения. Если игрок набирает «нет», он не вернется к исходному вопросу и не позволит ему ответить на него снова.

Итак, то, что я пробовал, определяется как разные методы:

Character.charRace()
Character.charDict()
Character.charTry()

Я думаю, что мои неудачные попытки кода говорят сами за себя с точки зрения того, что я пытался.

class Character:

    def charRace():
        raceOptions = ['Human', 'Dwarf', 'Elf', 'Dragonborn', 'Tiefling', 'Half-Elf']
        raceChoice = input(f'Choose a Race: {raceOptions} \n')

        if raceChoice == 'Human':
            res = input(
                """
                Choose Human? 
                (Y   /    N)
                """)

            if res == 'Y':
                print(f'You Chose {raceChoice}!')
            if res == 'N':
                del raceChoice
                raceChoice = input(f'Choose a Race: {raceOptions} \n')
                res = input(
                    """
                    Choose Human? 
                    (Y   /    N)
                    """)

        if raceChoice == 'Dwarf':
            res = input(
                """
                Choose Dwarf? 
                (Y    /    N)
                """)
            if res == 'Y':
                print(f'You Chose {raceChoice}!')
            if res == 'N':
                del raceChoice
                raceChoice = input(f'Choose a Race: {raceOptions} \n')

        if raceChoice == 'Elf':
            res = input(
                """
                Choose Elf? 
                (Y   /    N)
                """)

            if res == 'Y':
                print(f'You Chose {raceChoice}!')
            if res == 'N':
                del raceChoice
                raceChoice = input(f'Choose a Race: {raceOptions} \n')

        if raceChoice == 'Dragonborn':
            res = input(
            """
            Choose Dragonborn?
            (Y    /    N)
            """)

            if res == 'Y':
                print(f'You Chose {raceChoice}!')
            if res == 'N':
                del raceChoice
                raceChoice = input(f'Choose a Race: {raceOptions} \n')

        if raceChoice == 'Tiefling':
            res = input(
            """
            Choose Tiefling?
            (Y    /    N)
            """)

            if res == 'Y':
                print(f'You Chose {raceChoice}!')
            if res == 'N':
                del raceChoice
                raceChoice = input(f'Choose a Race: {raceOptions} \n')

        if raceChoice == 'Half-Elf':
            res = input(
            """
            Choose Half-Elf?
            (Y    /    N)
            """)

            if res == 'Y':
                print(f'You Chose {raceChoice}!')
            while res == 'N':
                del raceChoice
                raceChoice = input(f'Choose a Race: {raceOptions} \n')
                res = input(
                    """
                    Choose Half-Elf?
                    (Y    /    N)
                    """)

        if raceChoice == 'Orc':
            res = input(
                """
                Choose Orc?
                (Y    /    N)
                """)
            while res:
                if res == 'y':
                    print(f'You Chose {raceChoice}!')
                    break
                if res == 'n':
                    del raceChoice
                    raceChoice = input(f'Choose a Race: {raceOptions} \n')
                    res = input(
                        """
                        Choose Orc?
                        (Y    /    N)
                        """)

    def charDict():
        raceOptions = ['Human', 'Dwarf', 'Elf', 'Dragonborn', 'Tiefling', 'Half-Elf']
        raceChoice = input(f'Choose a Race: {raceOptions} \nRace: ')
        if raceChoice == 'Human' or 'human' or 'h':
            print(f'Choose {raceChoice}?\n')
            ans = input()
            if ans != 'Yes' or  'yes' or 'y':
                print(f'You chose {raceChoice}! ')
            elif ans == 'No' or 'no' or 'n':
                return raceChoice
            if raceChoice != 'Human' or 'human' or 'h' or 'Dwarf' or 'dwarf' or 'd' or 'Elf' or 'elf' or 'e' or 'Dragonborn' or 'dragonborn' or 'DB' or 'Tiefling' or 'tiefling' or 't':
                return 'That is not a race that can be chosen at this time!'

    def charTry():
        races = ['Human', 'Dwarf', 'Elf', 'Dragonborn', 'Tiefling', 'Half-Elf']
        res = input(f'Choose a Race: {races}. \nRace: ')
        race = res.capitalize()
        if race in races:
            if race == 'human' or 'Human' or 'h':
                print(f'Do you want to choose {race}? ')

    Character.charRace()
    Character.charDict()
    Character.charTry()

Пример желаемого результата:

>>> f'Choose a race {races}!:
>>> Human
>>> Do you want to play a Human?
>>> (Y    /    N)
>>> N
>>> Continue to browse...
>>> Choose a race: Human, Dwarf, Elf, Dragonborn, Tiefling, Half-Elf
>>> Dwarf
>>> Do want to play a Dwarf?
>>> Y
>>> You have chosen to play a Dwarf!

Я пыталсяНесколько разных методов, чтобы получить желаемый результат, но они не работают. Должен ли я построить конечный автомат? Как бы я это сделал? Как лучше всего продлить срок службы и сделать код модульным для будущего обновления?

1 Ответ

0 голосов
/ 12 ноября 2019

То, что вы пытаетесь сделать, - это создать меню, в котором пользователь может делать выбор, подтверждать и повторять свой выбор так часто, как это необходимо.

Способ сделать это - использовать бесконечный цикл while. По сути, вы просто хотите повторять один и тот же набор параметров, пока пользователь не сделает выбор или не завершит работу.

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

class Character:                                                                                                                                                                                                                                                                                

    RACES = ['Human', 'Dwarf', 'Elf', 'Dragonborn', 'Tiefling', 'Half-Elf']                                                                                      

    def choose(self):
        # list choices as (0) Human, (1) Dwarf etc                                                                                                                                                                                                                                                                             
        choices = ', '.join([f'({i}) {race}' for i, race in enumerate(self.RACES)])    
        # Loop forever!                                                                          
        while True:                                                                                                                                              
            choice = input(f'Choose a race: {choices} ')                                                                                                         
            choice = choice.upper()                                                                                                                              
            if choice == 'Q':                                                                                                                                    
                print('Bye!')  
                # Break out of the loop                                                                                                                                  
                break                                                                                                                                            
            elif not(choice.isdigit()):                                                                                                                          
                # Not a number                                                                                                                                   
                print('Sorry, please choose a number')                                                                                                                       
            elif not 0 <= int(choice) <= len(self.RACES):                                                                                                        
                # Number outside the range of choices                                                                                                            
                print('Sorry, please choose again')                                                                                                                                                                                                                                        
            else:   
                # The number input by the user matches the position
                # of their choice in the list of races                                                                                                                                             
                selection = self.RACES[int(choice)]                                                                                                              
                confirm = input(f'You chose {selection} - confirm (Y/N)? ')                                                                                      
                if confirm.upper() == 'Y':                                                                                                                       
                    print(f'Confirmed - you\'re a {selection}!')
                    # Break out of the loop                                                                                                 
                    break                                                                                                                                        
                else:                                                                                                                                            
                    print('OK, let\'s try again')                                                                                                                                                                                                                                                   
        return  
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...