Random name generator: Difference between revisions
Mr. MacKenty (talk | contribs) (Created page with "right|frame|This a problem set for you to work through <ref>http://www.flaticon.com/</ref> This is a problem set. Some of these are easy, others are far m...") |
Mr. MacKenty (talk | contribs) |
||
Line 57: | Line 57: | ||
<syntaxhighlight lang="python" > | <syntaxhighlight lang="python" > | ||
#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 | |||
</syntaxhighlight> | </syntaxhighlight> |
Revision as of 08:50, 1 September 2021
This is a problem set. Some of these are easy, others are far more difficult. The purpose of these problems sets are:
- to build your skill applying computational thinking to a problem
- 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