Существует ли простая петля для бросания 6 кубиков до тех пор, пока по крайней мере 4 не совпадут? - PullRequest
0 голосов
/ 15 января 2019

Вопрос звучит так: «Создайте программу, которая имитирует бросок кубика. Попросите программу выводить броски шести кубиков несколько раз, пока по крайней мере четыре кубика не бросят одинаковое число».

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

roll1 = random.choice(dice)    
print(roll1)    
roll2 = random.choice(dice)    
if roll2 == roll1:    
    print(roll2)

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

Ответы [ 3 ]

0 голосов
/ 15 января 2019

Я экспериментировал с циклами и сделал это, мне кажется, правильным

import random

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

same_dice = []

roll1 = random.choice(dice)
print("first dice is: ", roll1)
same_dice.append(roll1)

while True:
    roll2 = random.choice(dice)
    if roll2 in same_dice:
        print("two dice are", roll2)
        break
    else:
        random.choice(dice)
while True:
    roll3 = random.choice(dice)
    if roll3 in same_dice:
        print("three dice are", roll3)
        break
    else:
        random.choice(dice)
while True:
    roll4 = random.choice(dice)
    if roll4 in same_dice:
        print("four dice are", roll4)
        break
    else:
        random.choice(dice)
0 голосов
/ 15 января 2019

Здравствуйте @SaltyGaben и добро пожаловать в SO. Вы заявили, что проблема

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

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

Я протестировал следующий код, который использует один цикл while. Обратите внимание, что dice_output[i] - это бросок i го кубика.

import random

output_count = [0,0,0,0,0,0]    # A list to keep track of occurrences of each number between 1 to 6
dice_output = []

while True:
    roll = random.randint(1, 6)
    dice_output.append(roll)
    output_count[roll - 1] += 1
    l = len(dice_output)

    if (l == 6) and (4 in output_count):
        print("Dice :", dice_output)
        print("Count:", output_count)
        break

    if l == 6:
        print("Dice :", dice_output)
        output_count = [0,0,0,0,0,0]    # Resetting the counts
        dice_output = []                # Resetting the dice_output

Вот один из выводов, которые я получил:

Output:
Dice : [3, 5, 2, 3, 6, 5]
Dice : [5, 6, 2, 4, 2, 4]
Dice : [6, 6, 3, 1, 1, 5]
Dice : [3, 1, 4, 5, 3, 3]
Dice : [3, 6, 4, 2, 4, 6]
Dice : [1, 5, 5, 2, 6, 3]
Dice : [4, 2, 1, 4, 1, 6]
Dice : [5, 5, 6, 6, 3, 4]
Dice : [2, 1, 4, 2, 3, 6]
Dice : [2, 4, 5, 6, 3, 1]
Dice : [6, 3, 3, 3, 2, 1]
Dice : [5, 5, 6, 6, 4, 2]
Dice : [5, 4, 3, 5, 4, 2]
Dice : [1, 5, 1, 1, 1, 5]
Count: [4, 0, 0, 0, 2, 0]

Надеюсь, это поможет.

0 голосов
/ 15 января 2019

Так будет работать. Дайте мне знать, если кто-нибудь знает лучший способ.

Я использую функцию, чтобы разорвать все петли.

import random

def foo():
    while True:
        dice_list = random.choices(range(1, 7), k=6)
        dice_set = set(dice_list)

        if len(dice_set) > 3:
            continue

        for d in dice_set:
            if dice_list.count(d) > 3:
                return dice_list
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...