симуляция броска костей в питоне - PullRequest
0 голосов
/ 07 октября 2018

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

from random import randrange
print ("This program rolls two 6-sided dice until their sum is a given target value.")
input = int (input("Enter the target sum to roll for:"))

#def main():

dice1 = randrange (1,7)

dice2 = randrange (1,7)

sumofRoll = dice1 + dice2

output = "Roll: {} and {}, sum is {}".format (dice1,dice2,sumofRoll)
print (output)

if sumofRoll == input:
    print ("All done!!")
if sumofRoll != input:


#how do I make this repeatedly run until input number is reached?!

Ответы [ 5 ]

0 голосов
/ 07 октября 2018

Я взял вашу игру и добавил некоторые элементы, чтобы вы могли ее просмотреть.Во-первых, вы можете использовать random.choice и выбирать из списка die вместо того, чтобы повторно генерировать новые случайные числа.Во-вторых, вы можете использовать блок try/except, чтобы принять только int и блок, находящийся в диапазоне (2, 13).Затем мы можем добавить roll_count, чтобы отслеживать количество rolls, чтобы поразить нашу цель.Наш while цикл будет продолжаться до target == roll_sum, и тогда мы сможем print наши результаты.

from random import choice

die = [1, 2, 3, 4, 5, 6]

print('This program rolls two 6-sided dice until their sum is a given target.')
target = 0
while target not in range(2, 13):
    try:
        target = int(input('Enter the target sum to roll (2- 12): '))
    except ValueError:
        print('Please enter a target between 2 and 12')

roll_sum = 0
roll_count = 0

while target != roll_sum:

    die_1 = choice(die)
    die_2 = choice(die)
    roll_sum = die_1 + die_2
    roll_count += 1
    print('You rolled a total of {}'.format(roll_sum))

print('You hit your target {} in {} rolls'.format(target, roll_count))
...
You rolled a total of 4
You rolled a total of 12
You hit your target 12 in 29 rolls
0 голосов
/ 07 октября 2018

Вот полный рабочий код, который учитывает неверную сумму, введенную в качестве ввода.Сумма двух бросков костей не может быть меньше 2 или больше 13. Поэтому проверка этого условия делает ваш код немного более устойчивым.Вам нужно инициализировать sumofRoll = 0 перед входом в цикл while, так как это необходимо для первого входа в цикл while.Значение 0 является безопасным значением, поскольку мы исключили введенное пользователем значение 0 в качестве действительной суммы.

from random import randrange 
print ("This program rolls two 6-sided dice until their sum is a given target value.") 
input_sum = int(input("Enter the target sum to roll for:"))

def main():
    sumofRoll = 0
    if input_sum < 2 or input_sum > 13:
        print ("Enter a valid sum of dices")
        return
    while sumofRoll != input_sum:
        dice1 = randrange (1,7)
        dice2 = randrange (1,7)
        sumofRoll = dice1 + dice2
        output = "Roll: {} and {}, sum is {}".format (dice1,dice2,sumofRoll) 
        print (output)
        if sumofRoll == input_sum: 
            print ("All done!!") 

main()  

This program rolls two 6-sided dice until their sum is a given target value.
Enter the target sum to roll for:10
Roll: 3 and 5, sum is 8
Roll: 6 and 6, sum is 12
Roll: 5 and 1, sum is 6
Roll: 2 and 5, sum is 7
Roll: 6 and 6, sum is 12
Roll: 3 and 5, sum is 8
Roll: 1 and 2, sum is 3
Roll: 6 and 4, sum is 10
All done!!
0 голосов
/ 07 октября 2018
count = 0
while(sumOfRoll != input):
    dice1 = randrange(1,7)
    dice2 = rangrange(1,7)
    count = count + 1
    sumOfRoll = dice1 + dice2
print("sum = %s, took %s tries" % (sumOfRoll, count))
0 голосов
/ 07 октября 2018

Используйте оператор do while

do:
dice1=randrange(1,7)
...
while(sumofroll != input)
print("all done") 
0 голосов
/ 07 октября 2018

Это простой цикл , а :

sumofRoll = -1; #a starting value!
while sumofRoll != input:
  #Put the code that updates the sumofRoll variable here
...