0

私は関数(明らかにXDが本質的に苦手なもの)を使用しようとしており、最初からreturnステートメント情報を取得してから、2番目に使用しようとしています。どちらもサイコロを振るためのものなので、最初の関数で最初のセットを返し、それを 2 番目の関数で使用して、ユーザーに再ロールのオプションを提供します。元のダイエットリストを認識していないというこの実装で何が間違っていますか?

def rollDie():
   die1 = 2
   die2 = 2
   die3 = 2
   die4 = 4
   die5 = 5

   dieset = [die1,die2,die3,die4,die5]
   print(dieset)

   return dieset


def reRoll1():

rollDie() 
reroll1 = input("Would you like to reroll? Yes or No: ")
if reroll1 == "no":
    dieset = [die1,die2,die3,die4,die5]
else:
    count = 0
    times = int(input("How many die would you like to reroll? "))
    while count < times:
        whichreroll = input("Reroll die: ")
        if whichreroll == "1":
            die1 = random.randint(1,6)
        else:
            die1 
        if whichreroll == "2":
            die2 = random.randint(1,6)
        else:
            die2
        if whichreroll == "3":
            die3 = random.randint(1,6)
        else:
            die3
        if whichreroll == "4":
            die4 = random.randint(1,6)
        else:
            die4
        if whichreroll == "5":
            die5 = random.randint(1,6)
        else:
            die5
        dieset = [die1,die2,die3,die4,die5]
        count += 1
        print(dieset)   

        return dieset   
reRoll1()

「割り当て前にローカル変数 'die1' が参照されました」と言っていますが、最初に rollDie() が来ます。誰かが私にこれを説明できれば、それは大歓迎です:D

4

2 に答える 2

0

rollDie() から返されたデータを参照できるようにするには、それを変数に割り当てる必要があります。

dieset = rollDie() 

ただし、次の点にも問題があります。

if reroll1 == 'no':
    dieset = [die1, die2, die3, die4, die5]

ここでは、変数 die1、die2... を参照していますが、値は割り当てられていません。

回避策として、これらの変数に 0 などの任意の値を割り当てることができます。

dieset = [0, 0, 0, 0, 0]

しかし...その後、条件文で変数die1、die2...を参照します。実際には割り当てられていません。したがって、変数 dieset をすべて忘れて、die1、die2... を直接割り当てることができます。

die1, die2, die3, die4, die5 = rollDie() if reroll1 == 'yes' else [0, 0, 0, 0, 0]

die1このようにして、次の条件で値を単純に参照することができます。

お役に立てれば

于 2013-04-08T23:18:06.863 に答える
0

、 、はグローバル変数ではないためdie1、目的の動作が得られませんが、それらをそのように扱っています。die2...

言い換えれば、 within はdie1withinreRoll1()とは異なりdie1ますrollDie()

必要なものを取得するには、戻り値を操作するか、呼び出した場所と同じインデント レベルで定義を記述して変数をグローバルに初期化する必要があります。reRoll1()

于 2013-04-09T01:08:51.543 に答える