2016-10-29 13 views
1

私の問題を説明するのは難しいかもしれません。私はスロットマシンのように動作するプログラムを作成しようとしています。私のループでは、プレイヤーがスピンの結果に基づいて獲得するクレジットの数を決定しようとしています。しかし、プレイヤーがロールして300クレジットを獲得したときに、再びスピンするように頼まれたときに、別の時間に勝った場合、前のスピンの結果は記憶されません。スロットマシンロールの結果をループに追加

私はこれが単純な修正だと知っていますが、基本的にループが再び戻るたびに、更新された合計を忘れてしまいます。私はプログラミングに慣れていないし、このことは私にとってはまるで混乱している。ここで

は、私はループ部のために持っているものだ:

cashPool = 500 

import random 

# Assigning wheel properties 
wheel1 = ['Candy','Ghost','Pumpkin','Cat','Zombie','Witch','Witch','Cat','Ghost','Candy'] 
wheel2 = ['Candy','Ghost','Pumpkin','Cat','Zombie','Witch','Cat','Pumpkin','Ghost','Candy'] 
wheel3 = ['Candy','Ghost','Pumpkin','Cat','Zombie','Witch','Pumpkin','Candy','Candy','Ghost'] 

#loop to spin 


def AskYesNo(question): 
    tmp = input(question).lower() 
    if tmp.startswith('y'): 
     return True 
    else: 
     return False 

i = 0 

while True: 
    spin1 = random.randint(3,4) 
    spin2 = random.randint(3,4) 
    spin3 = random.randint(3,4) 
    print(str(wheel1[spin1])+ '\t' + str(wheel2[spin2]+ '\t' + str(wheel3[spin3]))) 
    i += 1 
    if spin1==4 and spin2==4 and spin3==4: 
     print('Congratulations! You have won 300 credits') 
     result = cashPool + 300 
     print('You currently have '+ str(result) +' credits') 
    if spin1==5 and spin2==5 and spin3==5: 
     print('Congratulations! You have won 250 credits') 
     result = cashPool + 250 
     print('You currently have '+ str(result)+ ' credits') 
    if spin1==3 and spin2==3 and spin3==3: 
     print('Congratulations! You have won 200 credits') 
     result = cashPool + 200 
     print('You currently have '+cashPool+' credits') 
    if spin1==2 and spin2==2 and spin3==2: 
     print('Congratulations! You have won 150 credits') 
     result = cashPool + 150 
     print('You currently have '+cashPool+' credits') 
    if spin1==1 and spin2==1 and spin3==1: 
     print('Congratulations! You have won 100 credits') 
     result = cashPool + 100 
     print('You currently have '+cashPool+' credits') 
    if spin1==0 and spin2==0 and spin3==0: 
     print('Congratulations! You have won 50 credits') 
     result = cashPool + 50 
     print('You currently have '+cashPool+' credits') 
    AskYesNo('Would you like to spin? Enter y/n ') 
    if False: 
     break 

はまた、私はむしろ文何度も繰り返した場合に行うよりも、各スピンの結果を計算するための簡単な方法があり、100%確信しています。しかし、再び、私は新しく、それは私を超えています。私はプログラマのように考えることができない、私は人々がそれを行う方法を知らない。

+0

もし 'false'が決して起こらないならば...また、' cashPool + = 300'がプールを更新し、 'result'を全く割り当てないと思います。 –

答えて

0

新しいresult変数を定義する代わりに、既存のcashPool変数を増分するだけです。例えば:

if spin1==4 and spin2==4 and spin3==4: 
    print('Congratulations! You have won 300 credits') 
    cashPool += 300 # Here 
    print('You currently have '+ str(result) +' credits') 
+0

私は完全に+ =を忘れているとは思えません。ただ=。私がプログラムしようとすると、私が問題に遭遇する時間の95%を誓っています。 ありがとうございました! – ALLCAPS

0

まず、random.randint(3,4)はわずか3または4を返します...あなたは残りの値をしたい場合は(0,4)する必要があります。

if Falseがこれまでに入力されていないため、このセクションは機能しません。

AskYesNo('Would you like to spin? Enter y/n ') 
if False: 
    break 

この関数からブール値を取得する必要があります。

if AskYesNo('Would you like to spin? Enter y/n '): 
    break 

いくつかの他の提案には、自分自身をあまり反復しないことが含まれます。あなたはあなたのスロットをチェックするために、いくつかの変数、定数、使用リスト、およびいくつかの関数型プログラミングを引き出すことができ

Python: determine if all items of a list are the same item

def all_same(items, element): 
    return all(x == element for x in items) 

からの借入、例えばそれDRY

ください。

この方法では、数字だけで遊んだだけで、最小限の変更を加えてゲーム全体を変えることができます。

total_slots = 3 
max_range = 4 
multiplier = 50 

while True: 
    i += 1 
    spins = [random.randint(0, max_range) for _ in range(total_slots)] 
    print('\t'.join(map(str, spins))) 

    credits = 0 
    for i in range(max_range + 1): # We loop over all spin possible values 
     won = all_same(spins, i) 
     if won: 
      credits = (i + 1) * multiplier # when i == 0, we add 50 
      print('Congratulations! You have won {} credits'.format(credits)) 
      break # can stop the for-loop 

    cashPool += credits # if you didn't win, nothing is added 
    print('You currently have {} credits'.format(cashPool)) 

    if AskYesNo('Would you like to spin? Enter y/n '): 
     break 

注:wheelの値は含まれていません。そのall_sameメソッドは、wheelリストの各spin値の文字列を取得するとすぐに機能します。

関連する問題