D & D Simulation
There's a few bugs here, but they should be pretty simple to fix (Hope this is useful to you btw), First, looking through the code and what the player reads, it says that Choosing gnome has no effect, but when you look at the code it shows that they get + 1 dex and - 1 con. Second, no matter what race I choose, it says I chose Human. Though this isn't a huge deal since the stats still change anyways.
I've also been playing around with something for D&D, but it's more for an ease of access thing for myself, like allowing me to roll for stats by typing "Roll Stats" instead of having to roll 4 dice and take away the lowest, etc. Anyways, when you roll for stats, it should be 4d6 and taking away the lowest number, and you have to do it that way instead of random.randint(3,18) because rolling 4d6 and subtracting the lowest promotes a higher number by removing the lowest number, the way I did this was like this:
stats = [random.randint(1, 6), random.randint(1, 6), random.randint(1, 6), random.randint(1,6)]
statsmath = stats + stats + stats + stats - min(stats)
stats = statsmath
Anyways I just wanted to make that note since I saw that you were making the stats random.randint(8, 18), and wanted to do 2 things. 1. Tell you that that's how I used to play D&D before I knew how to roll for stats correctly, just roll a d20 until I roll between whatever the DM set the minimum stat and maximum stat, and 2. Tell you how you could roll properly in python. Or at least how I did it, though I am still learning, and I could be over complicating things or there could be a better way of doing it.
I assume you'll add classes at some point, so I won't bug you too much about it, just wanted to say they'll be hard to implement, and once you're done with them you should pat yourself on the back.
Idk what just happened, I just ran the game again and it didn't happen, but when I was in the tutorial after it had said my class, the game just froze and nothing happened. I couldn't hit enter to continue or anything. Idk if it's related, but just in case, I forgot which race I chose, but it was either Elf or Half-Orc. I'm about to try them both and see if it happens again. Just tried both, nothing happened. I have no idea what the problem was.
Also, don't be too harsh on yourself with all the bugs/typos/just things that I think would be an improvement. Everyone makes mistakes, especially in coding, and I know for a fact that I have my fair share of those things in my code that I haven't even noticed yet because as the coder I know how to use my programs properly, however if someone who had never used it before came in and try it, they'd probably be able to point out loads of mistakes, a good example of this is in my project "Python Dictionary" https://repl.it/ibuiltthis/p/pythondictionary I was showing it to a friend and I was like "I spent so much time just thinking of different ways of saying 'yes' just so the user could type pretty much any form of yes, spelled in a lot of different ways, like 'yeah' and 'yea' and making sure that they could use caps or lowercase, etc." and they just went up, typed "ya" and broke it. In short. Don't let the problems bring you down. Stay determined to finish and fix the problems.
Oh yeah, the thing I said about print also applies to input. The quotation marks are unnecessary if they're blank. Only time this doesn't apply is if you're setting a variable to blank quotation marks. but that's just because if you leave it blank it doesn't know what you mean.
During the tutorial when it tells you that your character is marked as C, there's not a = input() after it, so it just skips past to you making your move. I had already assume C was your character, but for the people who it isn't as obvious to, you should add a a = input() after it.
There's also sometimes text in the dungeon window that says stuff like [40m. I haven't gotten to learning whatever it is you used to make the dungeons with, so I can't be much more helpful with this than just pointing out that it's a thing
When I moved my character in the tutorial for the first time, it also printed 4 dungeon windows. The first Says "Character:" above it and has the same thing I said in my previous comment, but this one's at the bottom and says 37 instead of 40, the second said "Character:" above the dungeon, but without the text in the dungeon, The third says "You are marked as C" then "Character:" then the dungeon, with text in the middle block that says 37, and then the one that I assume it's supposed to show, which says "14-9" then "Character" then the dungeon, which has the text on the bottom and it says 40. Very curious about what the "14-9" means.
Oh yeah, I've been meaning to say this, you should allow the user more options for what to type, so like everything that you can think of that the user might say when they mean one thing, like for example attack. (Haven't tested with this specific part, but just an example), they should be able to type "Attack" or "attack" or "Fight" or "fight" or any number of ways that you can think of of saying said thing, and all the ways you could type them, ofcourse being reasonable. I'm not asking you to account for every possible combination of capital or lowercase with the letters, just the beginning of words. Or if there's an apostrophe, possibly allowing the user to type it with or without the apostrophe. It's time consuming, but in the end it will be worth it.
IDK what the weird numbers appearing are, I think they are a termcolor bug or something, the 14-9 was the coordinates of the character that I had print to make it easier on myself when testing, and the Character: is what type of material the character was on. I use the string " " to mean empty space.