2014-11-17 3 views
0

Я ищу, чтобы создать простую игру в крэпс, и у меня возникли проблемы.Python craps game, while-loop issue

Если этот код введен:

import random 
def main(): 
    starting_money = int(input("How much do you have to gamble? : ")) 
    print() 
    player_bet = int(input("Enter your bet: ")) 
    number_1 = (random.randint(1,6)) 
    number_2 = (random.randint(1,6)) 
    print("Dice roll 1: ", number_1) 
    print("Dice roll 2: ", number_2) 
    roll = number_1 + number_2 
    print("Your roll: ", roll) 
    rounds = input("Play again? (Y/N): ") 
    while rounds != "n" and rounds == "y": 
     if rounds == "n": 
      print("Congratulations, you left with") 
     if roll == 7 or roll == 11: 
      print("You win $", player_bet, sep="") 
      new_money = starting_money + player_bet 
      print("You have $", new_money, " remaining.", sep="") 
     elif roll == 2 or roll == 3 or roll == 12: 
      new_money = starting_money - player_bet 
      print("You lost $", player_bet, sep="") 
      print("You have $", new_money, " remaining.", sep="") 
     else: 
      print("You push.") 
      new_money = starting_money 
      print("You have $", new_money, " remaining.", sep="") 
     break 
main() 

это происходит, когда я ввод "п".

Enter your bet: 5 
Dice roll 1: 6 
Dice roll 2: 6 
Your roll: 12 
Play again? (Y/N): n 

, и это происходит, когда я вводю «y».

Enter your bet: 5 
Dice roll 1: 2 
Dice roll 2: 3 
Your roll: 5 
Play again? (Y/N): y 
You push. 
You have $10 remaining. 

В обоих случаях он должен сообщить пользователю, или не толкать их, выиграть или проиграть, прежде чем он спрашивает, если они хотят играть снова. Как я могу это сделать?

Если я поставил «раунды» внутри цикла while, он сообщает мне, что раунды ссылаются до того, как они назначены.

ответ

0

Первая проблема заключается в том, что весь код, который сообщает пользователю, будут ли они нажимать, выигрывать или проигрывать, находится внутри цикла, и если пользователь вводит «n», этот код никогда не запускается. Реальная проблема заключается в том, что большая часть вашего кода действительно должна находиться внутри цикла, в том числе спрашивать у пользователя, сколько они хотят делать ставки и катить кости.

Я бы начал с инициализации переменной rounds значением по умолчанию «y», чтобы цикл выполнялся хотя бы один раз, а затем не спрашивайте пользователя, хотите ли они снова играть до конца цикла. Затем переместите весь свой код внутри цикла. (За исключением «Сколько вы должны играть в азартные игры?» Часть, которая, вероятно, следует оставаться вне цикла.).

Это проверялось, но порядок вещей должно быть что-то вроде:

import random 

def main(): 
    starting_money = int(input("How much do you have to gamble? : ")) 
    print() 

    rounds = "y" 

    while rounds != "n" and rounds == "y": 

     player_bet = int(input("Enter your bet: ")) 
     number_1 = (random.randint(1,6)) 
     number_2 = (random.randint(1,6)) 
     print("Dice roll 1: ", number_1) 
     print("Dice roll 2: ", number_2) 
     roll = number_1 + number_2 
     print("Your roll: ", roll) 

     if rounds == "n": 
      print("Congratulations, you left with") 
     if roll == 7 or roll == 11: 
      print("You win $", player_bet, sep="") 
      new_money = starting_money + player_bet 
      print("You have $", new_money, " remaining.", sep="") 
     elif roll == 2 or roll == 3 or roll == 12: 
      new_money = starting_money - player_bet 
      print("You lost $", player_bet, sep="") 
      print("You have $", new_money, " remaining.", sep="") 
     else: 
      print("You push.") 
      new_money = starting_money 
      print("You have $", new_money, " remaining.", sep="") 

     rounds = input("Play again? (Y/N): ") 


main() 

Вероятно, вам также следует подумать о том, чтобы закончить игру, если у игрока закончились деньги.

+0

Я сделал все это, но по какой-то причине код все еще не зацикливается. – JCJG

+0

@JCJG Избавиться от утверждения 'break'. –

+0

Ах! это сработало! Спасибо миллион, я думаю, что я могу получить остальное отсюда :) – JCJG

0

Я думаю, что есть много здесь, чтобы обметать, но почему бы не начать с:

rounds = 'y' 
while ..... 
    .... 
    .... 
    else: 
    .... 
    rounds = input("Play again (y/n)") 

Таким образом, вы автоматически попадаете в цикл в то время как после первого броска и дать результаты пользователей, прежде чем спрашивать, если они хотят играть снова. Следующая проблема, с которой вам приходится иметь дело, заключается в том, что в цикле while нет никаких условий для размещения новых ставок или повторного набора костей.

+0

Yup, я пытаюсь выяснить, как это сделать :( – JCJG