Я сделал простой ролик для игры в кости с for-in loop
, который принимает 2 части input
, количество костей и количество граней костей. Когда рулон сделан, результаты распечатываются на экране.
После того, как первоначальный бросок сделан, я хотел бы, чтобы код начался снова, с новым inputs
, без создания exit code 0
.
##Original design obviously does not loop
from random import randint
import time
dice = int(input("\nHow many dice?\n "))
sides = int(input("How many sides?\n "))
def roll():
for quantity in range(dice):
time.sleep(.5)
print(randint(1, sides))
roll()
Я переместил переменные input
из global scope
в local scope
, чтобы их можно было обновлять при каждом повторении. Когда я заканчиваю function
вызовом function
, я достигаю некоторого успеха. Я могу loop
выполнять процесс бесконечно, не создавая exit code 0
, но любое количество кубиков сверх 1
, похоже, не регистрируется. Таким образом я могу бросать только один кубик за раз.
##Design 2 does not generate any exit codes and continues to loop
##endlessly but will not register more than 1 dice
from random import randint
import time
def roll():
dice = int(input("\nHow many dice?\n "))
sides = int(input("How many sides?\n "))
for quantity in range(dice):
time.sleep(.5)
print(randint(1, sides))
roll()
roll()
Я изменил function
так, чтобы он не заканчивался на calling
сам по себе. Вместо этого я создал новую функцию, которая ничего не делает, кроме вызова первой. Я поместил избыточную функцию после первой и смог успешно достичь своей цели, бросив любое количество граненых кубиков, сколько мне заблагорассудится... дважды. После двух итераций/циклов генерируется exit code 0
##Current design will register all input data correctly
##but only loops 2 times before generating an `exit code 0`
from random import randint
import time
def roll():
dice = int(input("\nHow many dice?\n "))
sides = int(input("How many sides?\n "))
for quantity in range(dice):
time.sleep(.5)
print(randint(1, sides))
def roll_again():
roll()
roll()
roll_again()
Кто-нибудь знает, что я делаю неправильно?
Да, 100% это то, что я хочу. Хотя я никогда раньше не использовал Boolean. Мне нужно будет проверить некоторые циклы while и посмотреть, что случилось.
Вы можете использовать цикл while
from random import randint
import time
def roll():
dice = int(input("\nHow many dice?\n "))
sides = int(input("How many sides?\n "))
for quantity in range(dice):
time.sleep(.5)
print(randint(1, sides))
while True:
roll()
Это запустит скрипт навсегда, новый ввод после всех бросков.
Для выхода нажмите Ctrl+C
Предыстория: цикл while
проверяет условие в начале и запускается, если оно выполнено (True
). В этом случае условие всегда установлено на True
, то есть выполняется навсегда ;-)
Вам нужно поместить игровую логику в цикл while; введите ноль кубиков, чтобы выйти, когда вы закончите играть.
from random import randint
import time
def roll():
for quantity in range(dice):
time.sleep(.5)
print(randint(1, sides))
while True:
dice = int(input("\nHow many dice? (zero to stop)\n "))
if dice == 0:
break
sides = int(input("How many sides?\n "))
roll()
Вы хотите, чтобы скрипт выполнялся непрерывно? Просите новый
input
после всех роллов? Если это так, вы можете обернуть свой код в циклwhile True:
.