I apologize for the omissions, I thought that I had isolated the problem, but I 
was way off the mark. The problem was, as suggested by Danny and Peter, in the 
function where the dictionary is assigned. I ran the type function, as Alex 
advised, and lo and behold the function was returning a string. In researching 
this, I learned that a function can return multiple values, so I expanded 
things a bit. Now, the function that randomly selects which demonstrative to 
drill also selects which a string to present as the clue (the first part, 
anyway), and returns the dictionary and the first part of the clue in a tuple. 
I then unpack that tuple into variables and work with those. 

The thing is, this looks really messy Could anyone give me some pointers on how 
this could be more elegantly done?

Here's the full code:
import random
import os

# ille, that/those masculine
that_those_Masculine_Singular = {'nom': 'ille', 'gen': 'illīus', 'dat': 'illī', 
'acc': 'illum', 'abl': 'illō'}
that_those_Masculine_Plural = {'nom': 'illī', 'gen': 'illōrum', 'dat': 'illīs', 
'acc': 'illōs', 'abl': 'illīs'}

# the rest of the dictionaries are empty. I wanted to get it working before 
putting everything in. 
# ille, that/those feminine
that_those_Feminine_Singular = {'nom': '', 'gen': '', 'dat': '', 'acc': '', 
'abl': ''}
that_those_Feminine_Plural = {'nom': '', 'gen': '', 'dat': '', 'acc': '', 
'abl': ''}

# ille, that/those neuter
that_those_Neuter_Singular = {'nom': '', 'gen': '', 'dat': '', 'acc': '', 
'abl': ''}
that_those_Neuter_Plural = {'nom': '', 'gen': '', 'dat': '', 'acc': '', 'abl': 
''}

# hic, this/these masculine
this_these_Masculine_Singular = {'nom': '', 'gen': '', 'dat': '', 'acc': '', 
'abl': ''}
this_these_Masculine_Plural = {'nom': '', 'gen': '', 'dat': '', 'acc': '', 
'abl': ''}

# hic, this/these feminine
this_these_Feminine_Singular = {'nom': '', 'gen': '', 'dat': '', 'acc': '', 
'abl': ''}
this_these_Feminine_Plural = {'nom': '', 'gen': '', 'dat': '', 'acc': '', 
'abl': ''}

# hic, this/these neuter
this_these_Neuter_Singular = {'nom': '', 'gen': '', 'dat': '', 'acc': '', 
'abl': ''}
this_these_Neuter_Plural = {'nom': '', 'gen': '', 'dat': '', 'acc': '', 'abl': 
''}

# iste, that (near you/of yours) masculine 
that_near_you_Masculine_Singular = {'nom': '', 'gen': '', 'dat': '', 'acc': '', 
'abl': ''}
that_near_you_Masculine_Plural = {'nom': '', 'gen': '', 'dat': '', 'acc': '', 
'abl': ''}

# iste, that (near you/of yours) feminine
that_near_you_Feminine_Singular = {'nom': '', 'gen': '', 'dat': '', 'acc': '', 
'abl': ''}
that_near_you_Feminine_Plural = {'nom': '', 'gen': '', 'dat': '', 'acc': '', 
'abl': ''}

# iste, that (near you/of yours) neuter
that_near_you_Neuter_Singular = {'nom': '', 'gen': '', 'dat': '', 'acc': '', 
'abl': ''}
that_near_you_Neuter_Plural = {'nom': '', 'gen': '', 'dat': '', 'acc': '', 
'abl': ''}


guess = ''
score = 0
tries = 0

while guess != 'exit':

        def chooseDemonstrative():
                # N = random.randint(1,18)
                N = 1 # This line will be removed so that it will pick any one 
of the dictionaries to be filled in above. This is just to get it working.
                Demonstrative = {} 
                Clue1 = ''
                if N == 1:
                        Demonstrative = that_those_Masculine_Singular
                        Clue1 = 'That/Those, Masculine Singular Demonstrative 
Pronoun/Adjective'
                elif N == 2:
                        Demonstrative = 'that_those_Masculine_Plural'
                elif N == 3:
                        Demonstrative = 'that_those_Feminine_Singular'
                elif N == 4:
                        Demonstrative = 'that_those_Feminine_Plural'
                elif N == 5: 
                        Demonstrative = 'that_those_Neuter_Singular'
                elif N == 6:
                        Demonstrative = 'that_those_Neuter_Plural'
                elif N == 7:
                        Demonstrative = 'this_these_Masculine_Singular'
                elif N == 8:
                        Demonstrative = 'this_these_Masculine_Plural'
                elif N == 9:
                        Demonstrative = 'this_these_Feminine_Singular'
                elif N == 10:
                        Demonstrative = 'this_these_Feminine_Plural'
                elif N == 11:
                        Demonstrative = 'this_these_Neuter_Singular'
                elif N == 12:
                        Demonstrative = 'this_these_Neuter_Plural'
                elif N == 13:
                        Demonstrative = 'that_near_you_Masculine_Singular'
                elif N == 14:
                        Demonstrative = 'that_near_you_Masculine_Plural'
                elif N == 15:
                        Demonstrative = 'that_near_you_Feminine_Singular'
                elif N == 16:
                        Demonstrative = 'that_near_you_Feminine_Plural'
                elif N == 17:
                        Demonstrative = 'that_near_you_Neuter_Singular'
                else: 
                        Demonstrative = 'that_near_you_Neuter_Plural '
                return Demonstrative, Clue1

        def chooseCase():
                c = ''
                Clue2 = ''
                number = random.randint(1,5)
                if number == 1:
                        c = 'nom'
                        Clue2 = 'Nominative'
                elif number == 2:
                        c = 'gen'
                        Clue2 = 'Genitive'
                elif number == 3:
                        c = 'dat'
                        Clue2 = 'Dative'
                elif number == 4:
                        c = 'acc'
                        Clue2 = 'Accusative'
                else:
                        c = 'abl'
                        Clue2 = 'Ablative'
                return c, Clue2
        
        Dem_and_clue = chooseDemonstrative()
        Case_and_clue = chooseCase()
        Dem = Dem_and_clue[0]
        Clue = Dem_and_clue[1] + ' ' + Case_and_clue[1]
        c = Case_and_clue[0]
        answer = Dem[c]

        os.system('clear')

        print(Clue)
        guess = input()
        if guess == 'exit':
                N = 0
                percentage = int((score/tries) * 100)
                print("You scored", score, "out of", tries, ", or", percentage, 
"%")

        tries +=1 
        
        if guess == answer:
                score += 1
                print('faster!')
        else:
                print(answer)
                print('slower...')

        input()
_______________________________________________
Tutor maillist  -  Tutor@python.org
To unsubscribe or change subscription options:
https://mail.python.org/mailman/listinfo/tutor

Reply via email to