Потеряна часть с петлями 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 ответ идеально подходит, если вы хотите исправить свой код. Мой только пытается объяснить, почему вы получили этот результат:)