Keep getting this in PyDev "TypeError: quiz() takes exactly 1 argument (0 given)"

Dave Angel d at davea.name
Fri Aug 10 15:29:48 EDT 2012


On 08/10/2012 02:52 PM, Chuck wrote:
> Hi all, I cannot figure why I keep getting this error.  It is my understanding that all methods need a self argument when designing a class.  Here is my code:
It'd be much more useful if you'd actually quote the entire error.
> import random
>
> class ElementsQuiz:
>
>     elements = {'H' : 'Hydrogen',
>                 'He' : 'Helium',
>                 'Li' : 'Lithium',
>                 'Be' : 'Beryllium',
>                 'B' : 'Boron',
>                 'C' : 'Carbon',
>                 'N' : 'Nitrogen',
>                 'O' : 'Oxygen',
>                 'F' : 'Fluorine',
>                 'Ne' : 'Neon',
>                 'Na' : 'Sodium',
>                 'Mg' : 'Magnesium',
>                 'Al' : 'Aluminium',
>                 'Si' : 'Silicon',
>                 'P' : 'Phosphorus',
>                 'S' : 'Sulfur',
>                 'Cl' : 'Chlorine',
>                 'Ar' : 'Argon',
>                 'K' : 'Potassium',
>                 'Ca' : 'Calcium',
>                 'Sc' : 'Scandium',
>                 'Ti' : 'Titanium',
>                 'V' : 'Vanadium',
>                 'Cr' : 'Chromium',
>                 'Mn' : 'Manganese',
>                 'Fe' : 'Iron',
>                 'Co' : 'Cobalt',
>                 'Ni' : 'Nickel',
>                 'Cu' : 'Copper',
>                 'Zn' : 'Zinc',
>                 'Ga' : 'Gallium',
>                 'Ge' : 'Germanium',
>                 'As' : 'Arsenic',
>                 'Se' : 'Selenium',
>                 'Br' : 'Bromine',
>                 'Kr' : 'Krypton',
>                 'Rb' : 'Rubidium',
>                 'Sr' : 'Strontium',
>                 'Y' : 'Yttrium',
>                 'Zr' : 'Zirconium',
>                 'Nb' : 'Niobium',
>                 'Mo' : 'Molybdenum',
>                 'Tc' : 'Technetium',
>                 'Ru' : 'Ruthenium',
>                 'Rh' : 'Rhodium',
>                 'Pd' : 'Palladium',
>                 'Ag' : 'Silver',
>                 'Cd' : 'Cadmium',
>                 'In' : 'Indium',
>                 'Sn' : 'Tin',
>                 'Sb' : 'Antimony',
>                 'Te' : 'Tellurium',
>                 'I' : 'Iodine',
>                 'Xe' : 'Xenon',
>                 'Cs' : 'Caesium',
>                 'Ba' : 'Barium',
>                 'La' : 'Lanthanum',
>                 'Ce' : 'Cerium',
>                 'Pr' : 'Praseodymium',
>                 'Nd' : 'Neodymium',
>                 'Pm' : 'Promethium',
>                 'Sm' : 'Samarium',
>                 'Eu' : 'Europium',
>                 'Gd' : 'Gadolinium',
>                 'Tb' : 'Terbium',
>                 'Dy' : 'Dysprosium',
>                 'Ho' : 'Holmium',
>                 'Er' : 'Erbium',
>                 'Tm' : 'Thulium',
>                 'Yb' : 'Ytterbium',
>                 'Lu' : 'Lutetium',
>                 'Hf' : 'Hafnium',
>                 'Ta' : 'Tantalum',
>                 'W' : 'Tungsten',
>                 'Re' : 'Rhenium',
>                 'Os' : 'Osmium',
>                 'Ir' : 'Iridium',
>                 'Pt' : 'Platinum',
>                 'Au' : 'Gold',
>                 'Hg' : 'Mercury',
>                 'Tl' : 'Thallium',
>                 'Pb' : 'Lead',
>                 'Bi' : 'Bismuth',
>                 'Po' : 'Polonium',
>                 'At' : 'Astatine',
>                 'Rn' : 'Radon',
>                 'Fr' : 'Francium',
>                 'Ra' : 'Radium',
>                 'Ac' : 'Actinium',
>                 'Th' : 'Thorium',
>                 'Pa' : 'Protactinium',
>                 'U' : 'Uranium',
>                 'Np' : 'Neptunium',
>                 'Pu' : 'Plutonium',
>                 'Am' : 'Americium',
>                 'Cm' : 'Curium',
>                 'Bk' : 'Berkelium',
>                 'Cf' : 'Californium',
>                 'Es' : 'Einsteinium',
>                 'Fm' : 'Fermium',
>                 'Md' : 'Mendelevium',
>                 'No' : 'Nobelium',
>                 'Lr' : 'Lawrencium',
>                 'Rf' : 'Rutherfordium',
>                 'Db' : 'Dubnium',
>                 'Sg' : 'Seaborgium',
>                 'Bh' : 'Bohrium',
>                 'Hs' : 'Hassium',
>                 'Mt' : 'Meitnerium',
>                 'Ds' : 'Darmstadtium',
>                 'Rg' : 'Roentgenium',
>                 'Cn' : 'Copernicium',
>                 'Uut' : 'Ununtrium',
>                 'Fl' : 'Flerovium',
>                 'Uup' : 'Ununpentium',
>                 'Lv' : 'Livermorium',
>                 'Uus' : 'Ununseptium',
>                 'Uuo' : 'Ununoctium'
>                 }
>                
>     def __init__(self):
>         self.quiz()
Why would you do all the work from a call inside the initializer? 
What's the point of having instance attributes if you're not going to
use it a second time?
>     def quiz(self):
>         self.reply = ('Moron', 'Dummy', 'Idiot', 'Embecile', 'Half-wit')
>         self.numCorrect = 0
>         self.question = random.choice(self.elements.keys())
>         print self.question
>         self.ans = raw_input('Answer: ')
>                 
>         if self.ans == self.elements(self.question):
>             self.numCorrect += 1
>         else:
>             self.insult = random.choice(self.reply)
>             print 'Incorrect %s' % self.insult
>     
>                 
>     if __name__ == '__main__':
>         quiz()
>         
Any reason why you put those two lines inside the class?  That's your
mainline code, and should be start at the left margin.

Once you move the if __name__  stuff to the margin, and instantiated an
object as Pedro mentions, and removed the call to quiz() from inside the
initializer, it might work.

I assume this is in a class because that was how it's assiged?

--
DaveA



More information about the Python-list mailing list