奇怪的Python错误

时间:2012-02-13 01:03:42

标签: python function

我正在制作一个向你推荐新音乐的python脚本,但由于某些原因我遇到了很多错误。脚本没有完成,但这里是

#!/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()

如果我输入yes你喜欢metallica,我会收到错误

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

如果我为时髦问题输入no:

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'

我得到这些虽然金属中没有漂浮物() 有谁知道发生了什么事?

2 个答案:

答案 0 :(得分:5)

问题是你使用与变量相同的函数名称,并且它们互相破坏。尝试使用不同的名称,例如对于函数likes_metal()和变量metal_score

此外,您应该在全局级别声明和初始化全局变量,而不是在indie函数内。

答案 1 :(得分:1)

您为函数和全局变量使用相同的名称。因此,当您运行任何函数时,您将删除所有函数并用int或float替换它们