2016-10-13 2 views
-2

Этот вопрос кажется, что на него будет легко ответить, просто сделав инструкцию if для моего максимума в диапазоне, НО, пожалуйста, возьмите секунду, чтобы прочитать, прежде чем называть меня идиотом. Я делаю программу, которая позволяет пользователю выбирать между множеством разных кубиков. Мне интересно, есть ли простой способ обнаружить, когда максимальное значение скатывается из любого из параметров, не задавая операторов для всех разных кубиков.Как определить, когда свернуто максимальное число?

def inphandle(choice): 
    if choice==4: 
     roll = random.randint(1,4) 
    elif choice==6: 
     roll = random.randint(1,6) 
    elif choice==8: 
     roll = random.randint(1,8) 
    elif choice==10: 
     roll = random.randint(1,10) 
    elif choice==20: 
     roll = random.randint(1,20) 
    return roll 

def dice(roll): 
    min = 0 
    if roll==1: 
     print("Min roll! Try again!") 
     min = min+1 
    if roll 


def mainmenu(): 
    print("Please choose from the following options:") 
    print("Roll | EXIT") 
    option = input() 
    if option=="EXIT" or option=="exit" or option=="Exit" 
     print("You rolled" + max + "max rolls and " + min + " min rolls! Goodbye!") 

def main(): 
    choice = int(input("Please enter a number corresponding to the number of faces on your dice. E.x. 4 for 4-Sided: ")) 
    cont = input("Would you like to roll the dice? Y or N: ") 
    while cont=="y" or cont=="Y": 
     roll = inphandle(choice) 
     dice(roll) 
     cont = input("Would you like to roll again? Y or N: ") 
    while cont=="n" or cont=="N": 
     easteregg() 
     cont = input("Do I get bunus points now?!?") 
main() 

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

+0

Я запутался, потому что 'def dice (roll):' является неполным и ничего не возвращает, и я не уверен, где вы хотите проверить, возвращается ли максимум. Непонятно, на что мы должны смотреть. – roganjosh

+0

Максимальное значение для текущей кости - это «выбор», просто сравните с прокатанным значением. – Goyo

ответ

-1

Просто используйте

def inphandle(choice): 
    roll = random.randint(1, choice) 
    return roll == choice 
+0

Ошибки в этом коде, например, отсутствуют. Посмотрите на 'def dice (roll):'. Как этот ответ «обнаруживает, когда максимальное значение скатывается из любого из параметров»? – roganjosh

+0

Я догадываюсь, что у вас есть нисходящий (я дал вам +1), потому что, хотя ваше предложение - это огромное улучшение ... он не отвечает на актуальные вопросы по плакатам –

+1

@ JoranBeasley Я дал нисходящее сообщение по причине, изложенной в моем комментарии. – roganjosh

0

Первое изменение inphandle

def inphandle(choice): 
    return random.randint(1,choice) 

, а затем изменить

while cont=="y" or cont=="Y": 
     roll = inphandle(choice) 
     dice(roll,choice) 

    ... 
def dice(roll,max_val): 
     if roll == max_val:print "MAX" 
     elif roll == 1:print "MIN" 
+1

ну, не используйте 'max' для имени аргумента;) –

+0

lol good catch ... allthough fwiw, так как я вообще никогда не использовал встроенный, и он только тени его локально ... (все равно плохо сделать это ... (хотя я бы не возражал, если бы они поставили свою домашнюю работу с max arg)) –

0

Позвольте мне предложить создать класс, который обрабатывает различные типы кости:

class Die(object): 
    def __init__(self, num_faces): 
     self.num_faces = num_faces 

    def roll(self): 
     return random.randint(1, self.num_faces) 

    def is_min(self, number): 
     return number == 1 

    def is_max(self, number): 
     return number == self.num_faces 

Я бы сказал, что это действительная ситуация, что и вы получите, чтобы узнать о классах;)

Затем используйте класс:

def main(): 
    minimums = maximums = 0 
    choice = int(input("Please enter a number corresponding to the" 
         " number of faces on your dice. E.x. 4 for 4-Sided: ")) 
    die = Die(choice) 
    cont = input("Would you like to roll the dice? Y or N: ") 
    while cont.lower() == "y": 
     number = die.roll() 
     if die.is_min(number): 
      minimums += 1 
     if die.is_max(number): 
      maximums += 1 
     cont = input("Would you like to roll again? Y or N: ") 

main() 

Обратите внимание, что я переехал ваши min & max счетчиков на главный , потому что альтернатива заключается в том, чтобы сделать глобалы плохими.

Я также переименовал их, потому что min и max - это имена встроенных функций. Лучше научиться не скрывать их.

+0

Это хорошая практика (я думаю), чтобы уменьшить 'while cont ==" y "или cont ==" Y ":' to 'while cont.lower() == 'y''. – Nf4r

+0

@ Nf4r Абсолютно. Я тоже это изменю. – zvone

0

Это то, что я хотел бы сделать:

изменить inphandle к этому:

def inphandle(choice): 
    roll = random.randrange(1,choice+1,1) 
    return roll 

И изменить основной(), чтобы:

def main(): 
    choice = int(input("Please enter a number corresponding to the number of faces on your dice. E.x. 4 for 4-Sided: ")) 
    valid_inputs = [4,6,8,10,12] 
    if choice not in valid_inputs: 
    print('Valid inputs are: 4,6,8,10,12. Try again.') 
    main() 
    cont = input("Would you like to roll the dice? Y or N: ") 
    while cont=="y" or cont=="Y": 
    roll = inphandle(choice) 
    dice(roll) 
    cont = input("Would you like to roll again? Y or N: ") 
    while cont=="n" or cont=="N": 
    easteregg() 
    cont = input("Do I get bunus points now?!?") 

Просто немного разъяснений на случайное .randrange:

random,randrange('from','to','increments') 

from - это минимальное значение и максимальное значение EXCEPT it. , так что если вам нужен диапазон от 1 до 4, положите от 1 до 5. приращение: положите 1 для приращений «1», поэтому возможные выходы с 1, 2, 3 или 4 вместо 1,3252342 или 2.446211

+0

Рекурсивный вызов 'main()' является ошибкой. Python имеет ограничение глубины рекурсии, что означает, что пользователь, который в три раза вводит '3', в конечном итоге вызывает исключение. Вместо этого это должен быть «while choice not in valid_inputs». – zvone

+0

hm, узнайте что-то новое каждый день! Имеет смысл для меня. Благодаря :) – willer2k

Смежные вопросы