Потеряна часть с петлями Python с функцией бросать объединенное значение кости

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

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

Я просто продолжаю получать последовательность 1 22 333 4444 55555

Если у вас есть какие-либо предложения или помощь, это очень ценится. Спасибо.

Вот код, который я разработал до сих пор

import random

def point():
    rollone = random.randint(1, 6)
    rolltwo = random.randint(1, 6)
    combined_value = dicesum(rollone, rolltwo)    


def dicesum(x, y):
    result = x + y
    return result 


for result in range(1,6):
    for dicerolls in range(result):
        print(result, end='')
    print()
point()

3 ответа

Ваш point Метод ничего не возвращает после суммирования результатов. Посмотрите код ниже.

import random

def point():
    rollone = random.randint(1,7)         # sample (1,7) to get values from 1 to 6
    rolltwo = random.randint(1,7)
    combined_value = rollone + rolltwo    # don't need a helper just to add these
    return combined_value                 # return the combined value

def main():
    for roll in range(5):
        print "Roll", roll, "Sum", point()

тестирование

>>> main()
Roll 0 Sum 6
Roll 1 Sum 2
Roll 2 Sum 5
Roll 3 Sum 7
Roll 4 Sum 12

В вашем коде очень мало печатается.

import random

def point():
    rollone = random.randint(1, 6)
    rolltwo = random.randint(1, 6)
    combined_value = dicesum(rollone, rolltwo)
    # Doesn't return anything


def dicesum(x, y):                  # A long way of saying return x+y
    result = x + y                  # shouldn't be a method
    return result 


for result in range(1,6):           # loop one...
    for dicerolls in range(result): # loop two!
        print(result, end='')
    print()
point()                             # Does't output anything, as mentioned above

То, что у вас есть на самом деле печать, так же, как

for how_many_repeats in range(1,6):
    for num in range(how_many_repeats): # Print num how_many_repeats times
        print(num, end='')
    print()                             # Add a blank

Самое короткое исправление вашего кода может выглядеть так

def point():
    rollone = random.randint(1, 6)
    rolltwo = random.randint(1, 6)
    combined_value = dicesum(rollone, rolltwo)
    return combined_value

for roll in range(5):
    print roll, point()

(И теперь я вижу, что это то, что Кибер подавил).

Проблема с вашим кодом заключается в том, что вы создаете цикл в диапазоне (n) в пределах диапазона (1,6), поэтому в основном при первой итерации вы получаете только 1 общий цикл (второй диапазон), затем вы создаете новый диапазон (2), который печатает в два раза содержание вашего результата. Во время третьей итерации вы вызываете range(3), который повторяет вашу печать в 3 раза (и снова, ваша печать выводит только переменную результата, а не dicerolls).

Это действительно дает результат, который вы имеете. Если я не достаточно ясно, замените строку:

print(result, end='')

по следующей строке:

print('Roll {}, iteration {}'.format(result, dicerolls))

Выполните его, и вы получите лучший результат.

РЕДАКТИРОВАТЬ: @Cyber ​​ответ идеально подходит, если вы хотите исправить свой код. Мой только пытается объяснить, почему вы получили этот результат:)

Другие вопросы по тегам