Build an RPG Character - Build an RPG Character

Tell us what’s happening:

17 of 19 completed, its only no.18 and no.19 left.

What syntax must I use to return the character name & the stats dots ?

Your code so far

full_dot = '●'
empty_dot = '○'

def create_character(name, strength, intelligence, charisma) :
    if not isinstance(name, str) :
        return 'The character name should be a string'
    if name == '' :
        return 'The character should have a name'
    if len(name) > 10 :
        return 'The character name is too long'
    if ' ' in name :
        return 'The character name should not contain spaces'
    if not isinstance(strength, int) :
        return 'All stats should be integers'
    if not isinstance(intelligence, int) :
        return 'All stats should be integers'
    if not isinstance(charisma, int) :
        return 'All stats should be integers'
    if strength < 1 :
        return 'All stats should be no less than 1'
    if intelligence < 1 :
        return 'All stats should be no less than 1'
    if charisma < 1 :
        return 'All stats should be no less than 1'
    if strength > 4 :
        return 'All stats should be no more than 4'
    if intelligence > 4 :
        return 'All stats should be no more than 4'
    if charisma > 4 :
        return 'All stats should be no more than 4'
    if strength + intelligence + charisma != 7 :
        return 'The character should start with 7 points'
    
    


Your browser information:

User Agent is: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/146.0.0.0 Safari/537.36

Challenge Information:

Build an RPG Character - Build an RPG Character

Hi @Fidelis_B_Codes,

Please review User Story #5. You need to build and return one string using the global variables for the dots and the function parameters. You can use newline characters in your string. Just take it a step at a time.

Happy coding!

How can I access that User Story ?

In the instructions. It’s the fifth item under the title “User Stories:”.

I’ve tried the syntax :

return create_character(‘ren’, 4, 2, 1)

But it didn’t work. It makes no.3 and the another odd numbers got wrong result.

You are trying to return a function call there, not a string.

You should test with a function call to see what your function returns:

print(create_character('ren',4,2,1))

full_dot = '●'
empty_dot = '○'

def create_character(name, strength, intelligence, charisma) :
    if not isinstance(name, str) :
        return 'The character name should be a string'
    elif name == '' :
        return 'The character should have a name'
    elif len(name) > 10 :
        return 'The character name is too long'
    elif ' ' in name :
        return 'The character name should not contain spaces'
    elif not isinstance(strength, int) :
        return 'All stats should be integers'
    elif not isinstance(intelligence, int) :
        return 'All stats should be integers'
    elif not isinstance(charisma, int) :
        return 'All stats should be integers'
    elif strength < 1 or intelligence < 1 or charisma < 1 :
        return 'All stats should be no less than 1'
    elif strength > 4 or intelligence > 4 or charisma > 4 :
        return 'All stats should be no more than 4'
    elif strength + intelligence + charisma != 7 :
        return 'The character should start with 7 points'
    
print(create_character('ren',4,2,1))

But it says none and still got wrong. Pherhaps, I don’t know what to type for the final return (else :).

It says None because your function is not returning anything after the validation checks pass. You need to return the string you were asked to build in User Story #5.

How to return that ? Using the f’{} syntax that the lesson I haven’t been there ?

Please review this theory lecture:

Introduction to Strings - What Are String Concatenation and String Interpolation? | Learn | freeCodeCamp.org

I’ve updated my code, but why the odd test numbers got wrong answer…

full_dot = '●'
empty_dot = '○'

def create_character(name, strength, intelligence, charisma) :
    if not isinstance(name, str) :
        return 'The character name should be a string'
    elif name == '' :
        return 'The character should have a name'
    elif len(name) > 10 :
        return 'The character name is too long'
    elif ' ' in name :
        return 'The character name should not contain spaces'
    elif not isinstance(strength, int) :
        return 'All stats should be integers'
    elif not isinstance(intelligence, int) :
        return 'All stats should be integers'
    elif not isinstance(charisma, int) :
        return 'All stats should be integers'
    elif strength < 1 or intelligence < 1 or charisma < 1 :
        return 'All stats should be no less than 1'
    elif strength > 4 or intelligence > 4 or charisma > 4 :
        return 'All stats should be no more than 4'
    elif strength + intelligence + charisma != 7 :
        return 'The character should start with 7 points'
    else :
        return f'{name} \nSTR{full_dot * strength}{empty_dot(10 - strength)} \nINT{full_dot * intelligence}{empty_dot(10 - intelligence)} \nCHA{full_dot * charisma}{empty_dot(10 - charisma)}'

What is this bit of code doing?

To make appearance of the empty dots

How can it do that the way it’s written? Is empty_dot a function?

Owh wait. Let me figure out if I forgot to put “*” as a multiplex.

Okay, sorry. I forgot to put the multiplex (*).

return f'{name}\nSTR {full_dot * strength}{empty_dot * (10 - strength)}\nINT {full_dot * intelligence}{empty_dot * (10 - intelligence)}\nCHA {full_dot * charisma}{empty_dot * (10 - charisma)}'

but I’m wondering why the system is very sensitive. If I type that syntax with too much spaces like :

return f'{name} \nSTR {full_dot * strength}{empty_dot * (10 - strength)} \nINT {full_dot * intelligence}{empty_dot * (10 - intelligence)} \nCHA {full_dot * charisma}{empty_dot * (10 - charisma)}'

Do you see the “too much spaces“ for the difference ? Because of that I can’t pass those 2 numbers (no.18 & 19)

Test with this code to compare the string your code returns to the string that is expected, then fix your string to match:

print('Actual:   ',repr(create_character('ren', 4, 2, 1))) 
print('Expected: ',repr('ren\nSTR ●●●●○○○○○○\nINT ●●○○○○○○○○\nCHA ●○○○○○○○○○'))