5

I am attending a beginner course and I am very new to programming. I need to know of a function which generates a username using the first letter of someone's name, the first three letters of a person's surname and a 3 digit number without spaces. So far I have this:

full_name = input("Please enter your name: ")
first_letter = full_name[0]
space_index = full_name.find(" ")
three_letters_surname = full_name[space_index + 1:space_index + 4]
number = random.randrange (1,999)
username = (first_letter, three_letters_surname, number)
print = (username)

The output I get is from using a name like John Wayne is:

"J", "Way", 14

What I want to know is how to change my code so I get something like:

jway014
2
  • Learn more about string formatting. pyformat.info Commented Mar 12, 2016 at 23:43
  • 1
    username = "".join([first_letter, three_letters_surname, str(number)]) Commented Mar 12, 2016 at 23:45

5 Answers 5

6

You might be better off using split() to break the user's name into parts and then extracting from there. This will let you check that the user has entered at least a two word name, and you can also handle the case that someone enters one or more middle names or initials:

full_name = input("Please enter your name: ").lower().split()
if len(full_name) > 1:
    first_letter = full_name[0][0]
    three_letters_surname = full_name[-1][:3].rjust(3, 'x')
    number = '{:03d}'.format(random.randrange (1,999))
    username = '{}{}{}'.format(first_letter, three_letters_surname, number)
    print(username)
else:
    print('Error. Please enter first name and surname')
    # try again...

Should a surname be less than 2 characters long (not uncommon), the name is left padded with x characters.

Some examples:

Input            Output
John Wayne       jway014
J J Cool         jcoo777
L Ron Hubbard    lron666
Bob Lo           bxlo001
Sign up to request clarification or add additional context in comments.

Comments

3

Try this

 import random
 import sys

 names = input("Please enter your name: ").split(" ")
 if not (len(names) > 1):
     print("Please input your full and last name.")
     sys.exit()
 first_letter = names[0][0]
 three_letters_surname = names[-1][:3]
 number = '{:03d}'.format(random.randrange(1, 999))
 username = (first_letter + three_letters_surname + number)
 print(username)

8 Comments

What if user enters "L Ron Hubbard"? Or just plain old "Bob"?
Also, what if the random number is < 100?
@mhawke Nice corrections, just edited to cover those cases, let me know what you think?
There are still bugs in this answer. What if user entered "A A Milne"?
@mhawke Fixed by referring to the last index
|
0

Replace this line:

username = (first_letter, three_letters_surname, number)

With this:

username = '{}{}{:03d}'.format(first_letter.lower(),
                               three_letters_surname.lower(),
                               number)

Comments

0

What about this:

import random

full_name = input("Please enter your name: ")
names = full_name.split(" ")
if (len(names) <= 1):
     print("Please input your full name")
     exit() 
first_letter = names[0][0]
three_letters_surname = names[1][0:3]
number = '{:03d}'.format(random.randrange (1,999))
username = "".join([first_letter, three_letters_surname, str(number)])
print(username)

1 Comment

number can be less than 100 - which will not produce a 3 digit string.
0

import random import sys

 names = input("Mobin: ").split(" ")
 if not (len(names) > 1):
     print("Pour Nowrouz .")
     sys.exit()
 first_letter = names[m][0]
 three_letters_surname = names[our][:3]
 number = 7'{:03d}'.format(random.randrange(1, 999))
 username = (first_letter + three_letters_surname + number)
 print(username)

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.