Billjk
Billjk

Reputation: 10686

Odd Python Errors

I am making a python script that suggests new music to you, but for some reason i am getting a lot of errors. Script is not finished, but here it is

#!/usr/bin/env python
print("This is to help you find new bands!")
pop = 0
def indie():
    global indie
    global classic_rock
    global metal
    global pop
    indie = 0
    classic_rock = 0
    metal = 0
    pop = 0
    indie += 3
    classic_rock -= 1
    metal -= 1.5
    pop -= 3
def notindie():
    global indie
    indie += 1
def classicrock():
    global classic_rock
    classic_rock += 2
def notclassicrock():
    global classic_rock
    classic_rock -= 1
def popp():
    global pop
    global indie
    pop += 3
    indie -= 3
def notpop():
    global pop
    global metal
    pop -= 1
    metal += 1
def notmetal():
    global metal
    global pop
    metal -= 3
    pop += 1
def metal():
    global metal
    global pop
    global indie
    global classicrock
    classicrock += 1
    metal += 3
    indie -= 1
    pop -= 4
que = input("Do you consider yourself to be a hipster? (Yes/No) ")
if que == 'yes':
    indie()
if que == 'no':
    notindie()
que2 = input("Do you like the Rolling Stones? (Yes/No) ")
if que2 == 'yes':
    classicrock()
if que2 == 'no':
    notclassicrock()
que3 = input("Do you like Britney Spears? (Yes/No) ")
if que3 == 'yes':
    popp()
if que3 == 'no':
    notpop()
que4 = input("Do you like Metallica? (Yes/No) ")
if que4 == 'no':
    notmetal()
if que4 == 'yes':
    metal()

if i enter yes for do you like metallica, i get the error

File "tastepy.py", line 69, in <module>
    metal()
TypeError: 'float' object is not callable

if i enter in no for the hipster question:

Traceback (most recent call last):
  File "tastepy.py", line 54, in <module>
    notindie()
  File "tastepy.py", line 19, in notindie
    indie += 1
TypeError: unsupported operand type(s) for +=: 'function' and 'int'

I get these although there is no float anything in metal() anybody know what is going on?

Upvotes: 0

Views: 118

Answers (2)

tobyodavies
tobyodavies

Reputation: 28099

you are using the same names for your functions and your global variables. consequently when you run any function you delete all the functions and replace them with ints or floats

Upvotes: 1

dkamins
dkamins

Reputation: 21918

The problem is that you are using the same names for your functions as your variables, and they are clobbering each other. Try using different names, e.g. for functions likes_metal() and for the variable metal_score.

Also you should declare and initialize your globals at the global level, not within the indie function.

Upvotes: 5

Related Questions