Random name generator

From Computer Science Wiki
This a problem set for you to work through [1]

This is a problem set. Some of these are easy, others are far more difficult. The purpose of these problems sets are:

  1. to build your skill applying computational thinking to a problem
  2. to assess your knowledge and skills of different programming practices

What is this problem set trying to do[edit]

Apply your understanding of computational thinking and programming to a real-world problem.

The Problem[edit]

We have a need to randomly create some realistic-looking names. We need to be able to create N number of names, where N is an integer from 0 to 50000. The names need to be first name, last name.

First names should be between 3 and 7 letters, last names should be between 5 an 15 letters. Names can be built from any real-world cultural context. No klingon names.

Realistic names are generally pronounceable. Realistic names are often common. Your solution must create random names, you may not randomly select a pre-existing name from a list of common names.

I would think about stems of words. For example, many first names might begin with "Ja" followed by something like a "n", "cob", "na", "sper" or a "ke". There are many such common stems in first names and last names.

How you will be assessed[edit]

Your solution will be graded using the following axis:


Scope

  • To what extent does your code implement the features required by our specification?
  • To what extent is there evidence of effort?

Correctness

  • To what extent did your code meet specifications?
  • To what extent did your code meet unit tests?
  • To what extent is your code free of bugs?

Design

  • To what extent is your code written well (i.e. clearly, efficiently, elegantly, and/or logically)?
  • To what extent is your code eliminating repetition?
  • To what extent is your code using functions appropriately?

Style

  • To what extent is your code readable?
  • To what extent is your code commented?
  • To what extent are your variables well named?
  • To what extent do you adhere to style guide?

References[edit]

A possible solution[edit]

Click the expand link to see one possible solution, but NOT before you have tried and failed!

#Random name generator
import random

first_syllable = ["No","Jo","Lu","Li","Rob","Ja","Oli","Da","Ca","Be","Al","Ma","Em","Je","Su","Do","Ha","Ta","Ty","Po","Ha","Fi","Me"]
second_syllable = ["a","e","cy","o","ver","ar","n","ven","na","as","ren","us"]
vowel = ["a","e","i","o","u"]
consonant = ["b","c","d","f","g","h","j","k","l","m","n","p","q","s","t","u","w","x","y","z"]

for i in range(1,50):
    exact_name = ""
    exact_name+=((first_syllable[random.randrange(0,len(first_syllable)-1)]))
    exact_name += ((second_syllable[random.randrange(0,len(second_syllable)-1)]))

    exact_name += " "
    exact_name+= consonant[random.randrange(0,len(consonant)-1)].upper()
    for i in range(random.randrange(2,4)):
        exact_name += ((vowel[random.randrange(0,len(vowel)-1)]))
        exact_name+=((consonant[random.randrange(0,len(consonant)-1)]))

    print(exact_name)


# ============== a different solution ===============

def wordcreator1():
    first = random.randint(3,7)
    current_word = ''
    if first %2== 0: 
        for i in range(0,int(first/2)):
            pair = random.choice(vowel) + random.choice(constanents)
            current_word = current_word + pair   
    else:
        first = (first +1)/2
        for i in range(0,int(first)):
            pair = random.choice(vowel) + random.choice(constanents)
            current_word = current_word + pair
        if len(current_word) < 3:
            current_word = current_word + random.choice(vowel)
            
        elif len(current_word) > 7:
            length = int(len(current_word))
            current_word = current_word[:length-1]
    return current_word
            
def wordcreator2():
    last = random.randint(5,15) 
    current_word = ''
    if last %2== 0: 
        for i in range(0,int(last/2)):
            pair = random.choice(vowel) + random.choice(constanents)
            current_word = current_word + pair   
    else:
        last = (last +1)/2
        for i in range(0,int(last)):
            pair = random.choice(vowel) + random.choice(constanents)
            current_word = current_word + pair
        if len(current_word) < 3:
            current_word = current_word + random.choice(vowel)
            
        elif len(current_word) > 7:
            length = int(len(current_word))
            current_word = current_word[:length-1]
    return current_word