2012-02-13 12 views
0

私はあなたに新しい音楽を提案するpythonスクリプトを作っていますが、何らかの理由で私は多くのエラーが発生しています。スクリプトは終了しますが、ここでは奇妙な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を入力場合、私はヒップスターの質問のために何に入らない場合はメタリカのように、私はエラーに

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

を得るのですかですされていません。

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' 

メタルに何も浮いていませんが( )誰が何が起こっているのか知っていますか?

+1

[dicts](http://docs.python.org/tutorial/datastructures.html#dictionaries)と[lists](http://docs.python.org/tutorial/introduction.html#lists)あなたの実装は、ツタンの亀と同じくらい優雅です。 –

+0

whaddaya mean、implementation ... – Billjk

+0

20を超えるべきではないものを書くのに70行のコードを使用しています。あなたはPython言語の構造を利用していません。他の人のコードを調べることをお勧めします。[python.org](http://docs.python.org/tutorial/)でPython言語のチュートリアルを読む –

答えて

5

問題は、関数と同じ名前を変数として使用していて、お互いにぶつかり合っているということです。別の名前を使用してみてください。関数likes_metal()および変数metal_scoreの場合

また、indie関数内ではなく、グローバルレベルでグローバルを宣言して初期化する必要があります。

+0

ありがとう! – Billjk

+0

グローバルレベルで、あなたが意味する機能の外にはどういう意味ですか? – Billjk

+1

最初にグローバルを使用することもお勧めしません。関数のパラメータに値を渡す方が良いでしょう。 –

1

関数とグローバル変数で同じ名前を使用しています。したがって、関数を実行すると、すべての関数が削除され、intまたはfloatで置き換えられます。