Arbitrary Dice with Probability












2














I wrote a script that gives a "generalized" function of an arbitrary dice. Is this any good? How can it improve so to make it cleaner?



import random
def roll(die):
number = random.randint(0,len(die)-1)
b = die[number]
return b

Die1 = [1,2,3,4]
Die2 = [1,2,3,4,5,6] #num lists

def inptchacc():
ending_conditions = ['stop','Stop','quit','Quit']
end = False
inpu = input('what number would you like to add to the new face of the Die? (to end the die please type "stop or Stop or quit or Quit to finish the DIE" )')
while end == False:
if not(inpu in ending_conditions):
try:
retr = int(inpu)
return retr
except:
string = 'invalid input please try again'
inpu = input('invalid input please try again ')
else:
stop = 'stop'
return stop

def deeper(IDie):
list =
Adding = True
while Adding:
print('The Die ' + IDie + ' is currently ' + str(list) )
toadd = inptchacc()
if toadd != 'stop':
list.append(toadd)
else:
Adding = False
return list


def chance_overlap(Die1,Die2):
highnumber = 1000
counter = 0
for n in range(highnumber):
x = roll(Die1)
y = roll(Die2)
if x == y:
counter += 1
chance = counter/highnumber
return chance

chance = chance_overlap(Die1,Die2)

print(chance)
Doing = True
while Doing:
try:
IDie1 = deeper('IDie1')
IDie2 = deeper('IDie1')
chance2 = chance_overlap(IDie1,IDie2)
Doing = False
except:
print ('incompatible options selected returning....... ')

print(chance2)









share|improve this question
























  • What is the overall function of this, just rolling some arbitrary dice? It looks awfully complicated for such a simple task if that's it.
    – Mast
    4 hours ago










  • " The assignment deals with a game in which two players both have a set of dice. In the game, each player casts his/her dice and sums the outcomes of the dice. The player with the highest sum wins. If the sums are equal, it's a draw. Usually the dice within one set are equal, but different from the kind of dice in the other set." This is the assignment
    – Beginner-Coder123
    4 hours ago










  • As we all want to make our code more efficient or improve it in one way or another, try to write a title that summarizes what your code does, not what you want to get out of a review. Please see How to get the best value out of Code Review - Asking Questions for guidance on writing good question titles.
    – BCdotWEB
    4 hours ago






  • 1




    @Beginner-Coder123: You should add that description to the question body.
    – Graipher
    3 hours ago
















2














I wrote a script that gives a "generalized" function of an arbitrary dice. Is this any good? How can it improve so to make it cleaner?



import random
def roll(die):
number = random.randint(0,len(die)-1)
b = die[number]
return b

Die1 = [1,2,3,4]
Die2 = [1,2,3,4,5,6] #num lists

def inptchacc():
ending_conditions = ['stop','Stop','quit','Quit']
end = False
inpu = input('what number would you like to add to the new face of the Die? (to end the die please type "stop or Stop or quit or Quit to finish the DIE" )')
while end == False:
if not(inpu in ending_conditions):
try:
retr = int(inpu)
return retr
except:
string = 'invalid input please try again'
inpu = input('invalid input please try again ')
else:
stop = 'stop'
return stop

def deeper(IDie):
list =
Adding = True
while Adding:
print('The Die ' + IDie + ' is currently ' + str(list) )
toadd = inptchacc()
if toadd != 'stop':
list.append(toadd)
else:
Adding = False
return list


def chance_overlap(Die1,Die2):
highnumber = 1000
counter = 0
for n in range(highnumber):
x = roll(Die1)
y = roll(Die2)
if x == y:
counter += 1
chance = counter/highnumber
return chance

chance = chance_overlap(Die1,Die2)

print(chance)
Doing = True
while Doing:
try:
IDie1 = deeper('IDie1')
IDie2 = deeper('IDie1')
chance2 = chance_overlap(IDie1,IDie2)
Doing = False
except:
print ('incompatible options selected returning....... ')

print(chance2)









share|improve this question
























  • What is the overall function of this, just rolling some arbitrary dice? It looks awfully complicated for such a simple task if that's it.
    – Mast
    4 hours ago










  • " The assignment deals with a game in which two players both have a set of dice. In the game, each player casts his/her dice and sums the outcomes of the dice. The player with the highest sum wins. If the sums are equal, it's a draw. Usually the dice within one set are equal, but different from the kind of dice in the other set." This is the assignment
    – Beginner-Coder123
    4 hours ago










  • As we all want to make our code more efficient or improve it in one way or another, try to write a title that summarizes what your code does, not what you want to get out of a review. Please see How to get the best value out of Code Review - Asking Questions for guidance on writing good question titles.
    – BCdotWEB
    4 hours ago






  • 1




    @Beginner-Coder123: You should add that description to the question body.
    – Graipher
    3 hours ago














2












2








2







I wrote a script that gives a "generalized" function of an arbitrary dice. Is this any good? How can it improve so to make it cleaner?



import random
def roll(die):
number = random.randint(0,len(die)-1)
b = die[number]
return b

Die1 = [1,2,3,4]
Die2 = [1,2,3,4,5,6] #num lists

def inptchacc():
ending_conditions = ['stop','Stop','quit','Quit']
end = False
inpu = input('what number would you like to add to the new face of the Die? (to end the die please type "stop or Stop or quit or Quit to finish the DIE" )')
while end == False:
if not(inpu in ending_conditions):
try:
retr = int(inpu)
return retr
except:
string = 'invalid input please try again'
inpu = input('invalid input please try again ')
else:
stop = 'stop'
return stop

def deeper(IDie):
list =
Adding = True
while Adding:
print('The Die ' + IDie + ' is currently ' + str(list) )
toadd = inptchacc()
if toadd != 'stop':
list.append(toadd)
else:
Adding = False
return list


def chance_overlap(Die1,Die2):
highnumber = 1000
counter = 0
for n in range(highnumber):
x = roll(Die1)
y = roll(Die2)
if x == y:
counter += 1
chance = counter/highnumber
return chance

chance = chance_overlap(Die1,Die2)

print(chance)
Doing = True
while Doing:
try:
IDie1 = deeper('IDie1')
IDie2 = deeper('IDie1')
chance2 = chance_overlap(IDie1,IDie2)
Doing = False
except:
print ('incompatible options selected returning....... ')

print(chance2)









share|improve this question















I wrote a script that gives a "generalized" function of an arbitrary dice. Is this any good? How can it improve so to make it cleaner?



import random
def roll(die):
number = random.randint(0,len(die)-1)
b = die[number]
return b

Die1 = [1,2,3,4]
Die2 = [1,2,3,4,5,6] #num lists

def inptchacc():
ending_conditions = ['stop','Stop','quit','Quit']
end = False
inpu = input('what number would you like to add to the new face of the Die? (to end the die please type "stop or Stop or quit or Quit to finish the DIE" )')
while end == False:
if not(inpu in ending_conditions):
try:
retr = int(inpu)
return retr
except:
string = 'invalid input please try again'
inpu = input('invalid input please try again ')
else:
stop = 'stop'
return stop

def deeper(IDie):
list =
Adding = True
while Adding:
print('The Die ' + IDie + ' is currently ' + str(list) )
toadd = inptchacc()
if toadd != 'stop':
list.append(toadd)
else:
Adding = False
return list


def chance_overlap(Die1,Die2):
highnumber = 1000
counter = 0
for n in range(highnumber):
x = roll(Die1)
y = roll(Die2)
if x == y:
counter += 1
chance = counter/highnumber
return chance

chance = chance_overlap(Die1,Die2)

print(chance)
Doing = True
while Doing:
try:
IDie1 = deeper('IDie1')
IDie2 = deeper('IDie1')
chance2 = chance_overlap(IDie1,IDie2)
Doing = False
except:
print ('incompatible options selected returning....... ')

print(chance2)






python python-3.x






share|improve this question















share|improve this question













share|improve this question




share|improve this question








edited 4 hours ago







Beginner-Coder123

















asked 4 hours ago









Beginner-Coder123Beginner-Coder123

162




162












  • What is the overall function of this, just rolling some arbitrary dice? It looks awfully complicated for such a simple task if that's it.
    – Mast
    4 hours ago










  • " The assignment deals with a game in which two players both have a set of dice. In the game, each player casts his/her dice and sums the outcomes of the dice. The player with the highest sum wins. If the sums are equal, it's a draw. Usually the dice within one set are equal, but different from the kind of dice in the other set." This is the assignment
    – Beginner-Coder123
    4 hours ago










  • As we all want to make our code more efficient or improve it in one way or another, try to write a title that summarizes what your code does, not what you want to get out of a review. Please see How to get the best value out of Code Review - Asking Questions for guidance on writing good question titles.
    – BCdotWEB
    4 hours ago






  • 1




    @Beginner-Coder123: You should add that description to the question body.
    – Graipher
    3 hours ago


















  • What is the overall function of this, just rolling some arbitrary dice? It looks awfully complicated for such a simple task if that's it.
    – Mast
    4 hours ago










  • " The assignment deals with a game in which two players both have a set of dice. In the game, each player casts his/her dice and sums the outcomes of the dice. The player with the highest sum wins. If the sums are equal, it's a draw. Usually the dice within one set are equal, but different from the kind of dice in the other set." This is the assignment
    – Beginner-Coder123
    4 hours ago










  • As we all want to make our code more efficient or improve it in one way or another, try to write a title that summarizes what your code does, not what you want to get out of a review. Please see How to get the best value out of Code Review - Asking Questions for guidance on writing good question titles.
    – BCdotWEB
    4 hours ago






  • 1




    @Beginner-Coder123: You should add that description to the question body.
    – Graipher
    3 hours ago
















What is the overall function of this, just rolling some arbitrary dice? It looks awfully complicated for such a simple task if that's it.
– Mast
4 hours ago




What is the overall function of this, just rolling some arbitrary dice? It looks awfully complicated for such a simple task if that's it.
– Mast
4 hours ago












" The assignment deals with a game in which two players both have a set of dice. In the game, each player casts his/her dice and sums the outcomes of the dice. The player with the highest sum wins. If the sums are equal, it's a draw. Usually the dice within one set are equal, but different from the kind of dice in the other set." This is the assignment
– Beginner-Coder123
4 hours ago




" The assignment deals with a game in which two players both have a set of dice. In the game, each player casts his/her dice and sums the outcomes of the dice. The player with the highest sum wins. If the sums are equal, it's a draw. Usually the dice within one set are equal, but different from the kind of dice in the other set." This is the assignment
– Beginner-Coder123
4 hours ago












As we all want to make our code more efficient or improve it in one way or another, try to write a title that summarizes what your code does, not what you want to get out of a review. Please see How to get the best value out of Code Review - Asking Questions for guidance on writing good question titles.
– BCdotWEB
4 hours ago




As we all want to make our code more efficient or improve it in one way or another, try to write a title that summarizes what your code does, not what you want to get out of a review. Please see How to get the best value out of Code Review - Asking Questions for guidance on writing good question titles.
– BCdotWEB
4 hours ago




1




1




@Beginner-Coder123: You should add that description to the question body.
– Graipher
3 hours ago




@Beginner-Coder123: You should add that description to the question body.
– Graipher
3 hours ago










3 Answers
3






active

oldest

votes


















3














The right functions



def roll(die):
number = random.randint(0,len(die)-1)
b = die[number]
return b


Can be:



def roll(die):
return random.choice(die)


inptchacc()



You could instead check only the first character of the input (case insensitive), rather than expecting the whole keyword.



Your return variable stop isn't needed. Just return directly.



stop = 'stop'
return stop


Should be:



return 'stop'


Likewise elsewhere in your code.



Use __main__



Rather than putting code between functions and also at the end of the file, instead use:



if __name__ == '__main__':


See here for more details.






share|improve this answer





























    1














    Since you need to roll many times in the chance_overlap function, you might want to optimize making n rolls, using random.choices (Python 3.6+):



    from itertools import groupby

    def roll(die, n=1):
    if n == 1:
    return random.choice(die)
    return random.choices(die, k=n)

    def all_equal(iterable):
    "Returns True if all the elements are equal to each other"
    g = groupby(iterable)
    return next(g, True) and not next(g, False)

    def overlap_chance(*dice, n=1000):
    rolls = [roll(die, n) for die in dice]
    equal_rolls = sum(all_equal(roll) for roll in zip(*rolls))
    return equal_rolls / n


    Here I chose to include it in your roll function, which is nice because you only have on function, but you do have different return types depending on the value of k, which is not so nice. If you want to you can make it into two separate functions instead.



    I made chance_overlap take a variable number of dice so it even works for more than two (and also for one, which is a bit boring).



    In addition, I followed Python's official style-guide, PEP8 for variable names (lower_case).



    The all_equal function is directly taken from the itertools recipes.






    share|improve this answer





























      0














      Make the computer count



      These:



      Die1 = [1,2,3,4]
      Die2 = [1,2,3,4,5,6]


      should be



      die1 = list(range(1, 5))
      die2 = list(range(1, 7))


      Only compare once



      This list:



      ending_conditions = ['stop','Stop','quit','Quit']


      has two problems. First, don't store multiple cases for one word - just store lower (or upper) case - I prefer lower, because no shouting.



      Also, it shouldn't be a list. It's getting tested for membership, so make it a set. In other words,



      ending_conditions = {'stop', 'quiet'}


      then for use, write "not in", instead of "not x in"; i.e.



      if inpu.lower() not in ending_conditions:


      PEP8



      Run your code through a linter. It will catch several things, including




      • Don't capitalize your variables (Die1, Die2, Adding, Doing) if they're local. If they're global constants, they need to be all-uppercase. In the case of Die*, they probably shouldn't be global at all.

      • Add a couple of newlines after your imports


      Grammar



      Write:



      print('Incompatible options selected. Returning...')





      share|improve this answer





















        Your Answer





        StackExchange.ifUsing("editor", function () {
        return StackExchange.using("mathjaxEditing", function () {
        StackExchange.MarkdownEditor.creationCallbacks.add(function (editor, postfix) {
        StackExchange.mathjaxEditing.prepareWmdForMathJax(editor, postfix, [["\$", "\$"]]);
        });
        });
        }, "mathjax-editing");

        StackExchange.ifUsing("editor", function () {
        StackExchange.using("externalEditor", function () {
        StackExchange.using("snippets", function () {
        StackExchange.snippets.init();
        });
        });
        }, "code-snippets");

        StackExchange.ready(function() {
        var channelOptions = {
        tags: "".split(" "),
        id: "196"
        };
        initTagRenderer("".split(" "), "".split(" "), channelOptions);

        StackExchange.using("externalEditor", function() {
        // Have to fire editor after snippets, if snippets enabled
        if (StackExchange.settings.snippets.snippetsEnabled) {
        StackExchange.using("snippets", function() {
        createEditor();
        });
        }
        else {
        createEditor();
        }
        });

        function createEditor() {
        StackExchange.prepareEditor({
        heartbeatType: 'answer',
        autoActivateHeartbeat: false,
        convertImagesToLinks: false,
        noModals: true,
        showLowRepImageUploadWarning: true,
        reputationToPostImages: null,
        bindNavPrevention: true,
        postfix: "",
        imageUploader: {
        brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
        contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
        allowUrls: true
        },
        onDemand: true,
        discardSelector: ".discard-answer"
        ,immediatelyShowMarkdownHelp:true
        });


        }
        });














        draft saved

        draft discarded


















        StackExchange.ready(
        function () {
        StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fcodereview.stackexchange.com%2fquestions%2f211022%2farbitrary-dice-with-probability%23new-answer', 'question_page');
        }
        );

        Post as a guest















        Required, but never shown

























        3 Answers
        3






        active

        oldest

        votes








        3 Answers
        3






        active

        oldest

        votes









        active

        oldest

        votes






        active

        oldest

        votes









        3














        The right functions



        def roll(die):
        number = random.randint(0,len(die)-1)
        b = die[number]
        return b


        Can be:



        def roll(die):
        return random.choice(die)


        inptchacc()



        You could instead check only the first character of the input (case insensitive), rather than expecting the whole keyword.



        Your return variable stop isn't needed. Just return directly.



        stop = 'stop'
        return stop


        Should be:



        return 'stop'


        Likewise elsewhere in your code.



        Use __main__



        Rather than putting code between functions and also at the end of the file, instead use:



        if __name__ == '__main__':


        See here for more details.






        share|improve this answer


























          3














          The right functions



          def roll(die):
          number = random.randint(0,len(die)-1)
          b = die[number]
          return b


          Can be:



          def roll(die):
          return random.choice(die)


          inptchacc()



          You could instead check only the first character of the input (case insensitive), rather than expecting the whole keyword.



          Your return variable stop isn't needed. Just return directly.



          stop = 'stop'
          return stop


          Should be:



          return 'stop'


          Likewise elsewhere in your code.



          Use __main__



          Rather than putting code between functions and also at the end of the file, instead use:



          if __name__ == '__main__':


          See here for more details.






          share|improve this answer
























            3












            3








            3






            The right functions



            def roll(die):
            number = random.randint(0,len(die)-1)
            b = die[number]
            return b


            Can be:



            def roll(die):
            return random.choice(die)


            inptchacc()



            You could instead check only the first character of the input (case insensitive), rather than expecting the whole keyword.



            Your return variable stop isn't needed. Just return directly.



            stop = 'stop'
            return stop


            Should be:



            return 'stop'


            Likewise elsewhere in your code.



            Use __main__



            Rather than putting code between functions and also at the end of the file, instead use:



            if __name__ == '__main__':


            See here for more details.






            share|improve this answer












            The right functions



            def roll(die):
            number = random.randint(0,len(die)-1)
            b = die[number]
            return b


            Can be:



            def roll(die):
            return random.choice(die)


            inptchacc()



            You could instead check only the first character of the input (case insensitive), rather than expecting the whole keyword.



            Your return variable stop isn't needed. Just return directly.



            stop = 'stop'
            return stop


            Should be:



            return 'stop'


            Likewise elsewhere in your code.



            Use __main__



            Rather than putting code between functions and also at the end of the file, instead use:



            if __name__ == '__main__':


            See here for more details.







            share|improve this answer












            share|improve this answer



            share|improve this answer










            answered 2 hours ago









            esoteesote

            1,9891933




            1,9891933

























                1














                Since you need to roll many times in the chance_overlap function, you might want to optimize making n rolls, using random.choices (Python 3.6+):



                from itertools import groupby

                def roll(die, n=1):
                if n == 1:
                return random.choice(die)
                return random.choices(die, k=n)

                def all_equal(iterable):
                "Returns True if all the elements are equal to each other"
                g = groupby(iterable)
                return next(g, True) and not next(g, False)

                def overlap_chance(*dice, n=1000):
                rolls = [roll(die, n) for die in dice]
                equal_rolls = sum(all_equal(roll) for roll in zip(*rolls))
                return equal_rolls / n


                Here I chose to include it in your roll function, which is nice because you only have on function, but you do have different return types depending on the value of k, which is not so nice. If you want to you can make it into two separate functions instead.



                I made chance_overlap take a variable number of dice so it even works for more than two (and also for one, which is a bit boring).



                In addition, I followed Python's official style-guide, PEP8 for variable names (lower_case).



                The all_equal function is directly taken from the itertools recipes.






                share|improve this answer


























                  1














                  Since you need to roll many times in the chance_overlap function, you might want to optimize making n rolls, using random.choices (Python 3.6+):



                  from itertools import groupby

                  def roll(die, n=1):
                  if n == 1:
                  return random.choice(die)
                  return random.choices(die, k=n)

                  def all_equal(iterable):
                  "Returns True if all the elements are equal to each other"
                  g = groupby(iterable)
                  return next(g, True) and not next(g, False)

                  def overlap_chance(*dice, n=1000):
                  rolls = [roll(die, n) for die in dice]
                  equal_rolls = sum(all_equal(roll) for roll in zip(*rolls))
                  return equal_rolls / n


                  Here I chose to include it in your roll function, which is nice because you only have on function, but you do have different return types depending on the value of k, which is not so nice. If you want to you can make it into two separate functions instead.



                  I made chance_overlap take a variable number of dice so it even works for more than two (and also for one, which is a bit boring).



                  In addition, I followed Python's official style-guide, PEP8 for variable names (lower_case).



                  The all_equal function is directly taken from the itertools recipes.






                  share|improve this answer
























                    1












                    1








                    1






                    Since you need to roll many times in the chance_overlap function, you might want to optimize making n rolls, using random.choices (Python 3.6+):



                    from itertools import groupby

                    def roll(die, n=1):
                    if n == 1:
                    return random.choice(die)
                    return random.choices(die, k=n)

                    def all_equal(iterable):
                    "Returns True if all the elements are equal to each other"
                    g = groupby(iterable)
                    return next(g, True) and not next(g, False)

                    def overlap_chance(*dice, n=1000):
                    rolls = [roll(die, n) for die in dice]
                    equal_rolls = sum(all_equal(roll) for roll in zip(*rolls))
                    return equal_rolls / n


                    Here I chose to include it in your roll function, which is nice because you only have on function, but you do have different return types depending on the value of k, which is not so nice. If you want to you can make it into two separate functions instead.



                    I made chance_overlap take a variable number of dice so it even works for more than two (and also for one, which is a bit boring).



                    In addition, I followed Python's official style-guide, PEP8 for variable names (lower_case).



                    The all_equal function is directly taken from the itertools recipes.






                    share|improve this answer












                    Since you need to roll many times in the chance_overlap function, you might want to optimize making n rolls, using random.choices (Python 3.6+):



                    from itertools import groupby

                    def roll(die, n=1):
                    if n == 1:
                    return random.choice(die)
                    return random.choices(die, k=n)

                    def all_equal(iterable):
                    "Returns True if all the elements are equal to each other"
                    g = groupby(iterable)
                    return next(g, True) and not next(g, False)

                    def overlap_chance(*dice, n=1000):
                    rolls = [roll(die, n) for die in dice]
                    equal_rolls = sum(all_equal(roll) for roll in zip(*rolls))
                    return equal_rolls / n


                    Here I chose to include it in your roll function, which is nice because you only have on function, but you do have different return types depending on the value of k, which is not so nice. If you want to you can make it into two separate functions instead.



                    I made chance_overlap take a variable number of dice so it even works for more than two (and also for one, which is a bit boring).



                    In addition, I followed Python's official style-guide, PEP8 for variable names (lower_case).



                    The all_equal function is directly taken from the itertools recipes.







                    share|improve this answer












                    share|improve this answer



                    share|improve this answer










                    answered 50 mins ago









                    GraipherGraipher

                    23.6k53585




                    23.6k53585























                        0














                        Make the computer count



                        These:



                        Die1 = [1,2,3,4]
                        Die2 = [1,2,3,4,5,6]


                        should be



                        die1 = list(range(1, 5))
                        die2 = list(range(1, 7))


                        Only compare once



                        This list:



                        ending_conditions = ['stop','Stop','quit','Quit']


                        has two problems. First, don't store multiple cases for one word - just store lower (or upper) case - I prefer lower, because no shouting.



                        Also, it shouldn't be a list. It's getting tested for membership, so make it a set. In other words,



                        ending_conditions = {'stop', 'quiet'}


                        then for use, write "not in", instead of "not x in"; i.e.



                        if inpu.lower() not in ending_conditions:


                        PEP8



                        Run your code through a linter. It will catch several things, including




                        • Don't capitalize your variables (Die1, Die2, Adding, Doing) if they're local. If they're global constants, they need to be all-uppercase. In the case of Die*, they probably shouldn't be global at all.

                        • Add a couple of newlines after your imports


                        Grammar



                        Write:



                        print('Incompatible options selected. Returning...')





                        share|improve this answer


























                          0














                          Make the computer count



                          These:



                          Die1 = [1,2,3,4]
                          Die2 = [1,2,3,4,5,6]


                          should be



                          die1 = list(range(1, 5))
                          die2 = list(range(1, 7))


                          Only compare once



                          This list:



                          ending_conditions = ['stop','Stop','quit','Quit']


                          has two problems. First, don't store multiple cases for one word - just store lower (or upper) case - I prefer lower, because no shouting.



                          Also, it shouldn't be a list. It's getting tested for membership, so make it a set. In other words,



                          ending_conditions = {'stop', 'quiet'}


                          then for use, write "not in", instead of "not x in"; i.e.



                          if inpu.lower() not in ending_conditions:


                          PEP8



                          Run your code through a linter. It will catch several things, including




                          • Don't capitalize your variables (Die1, Die2, Adding, Doing) if they're local. If they're global constants, they need to be all-uppercase. In the case of Die*, they probably shouldn't be global at all.

                          • Add a couple of newlines after your imports


                          Grammar



                          Write:



                          print('Incompatible options selected. Returning...')





                          share|improve this answer
























                            0












                            0








                            0






                            Make the computer count



                            These:



                            Die1 = [1,2,3,4]
                            Die2 = [1,2,3,4,5,6]


                            should be



                            die1 = list(range(1, 5))
                            die2 = list(range(1, 7))


                            Only compare once



                            This list:



                            ending_conditions = ['stop','Stop','quit','Quit']


                            has two problems. First, don't store multiple cases for one word - just store lower (or upper) case - I prefer lower, because no shouting.



                            Also, it shouldn't be a list. It's getting tested for membership, so make it a set. In other words,



                            ending_conditions = {'stop', 'quiet'}


                            then for use, write "not in", instead of "not x in"; i.e.



                            if inpu.lower() not in ending_conditions:


                            PEP8



                            Run your code through a linter. It will catch several things, including




                            • Don't capitalize your variables (Die1, Die2, Adding, Doing) if they're local. If they're global constants, they need to be all-uppercase. In the case of Die*, they probably shouldn't be global at all.

                            • Add a couple of newlines after your imports


                            Grammar



                            Write:



                            print('Incompatible options selected. Returning...')





                            share|improve this answer












                            Make the computer count



                            These:



                            Die1 = [1,2,3,4]
                            Die2 = [1,2,3,4,5,6]


                            should be



                            die1 = list(range(1, 5))
                            die2 = list(range(1, 7))


                            Only compare once



                            This list:



                            ending_conditions = ['stop','Stop','quit','Quit']


                            has two problems. First, don't store multiple cases for one word - just store lower (or upper) case - I prefer lower, because no shouting.



                            Also, it shouldn't be a list. It's getting tested for membership, so make it a set. In other words,



                            ending_conditions = {'stop', 'quiet'}


                            then for use, write "not in", instead of "not x in"; i.e.



                            if inpu.lower() not in ending_conditions:


                            PEP8



                            Run your code through a linter. It will catch several things, including




                            • Don't capitalize your variables (Die1, Die2, Adding, Doing) if they're local. If they're global constants, they need to be all-uppercase. In the case of Die*, they probably shouldn't be global at all.

                            • Add a couple of newlines after your imports


                            Grammar



                            Write:



                            print('Incompatible options selected. Returning...')






                            share|improve this answer












                            share|improve this answer



                            share|improve this answer










                            answered 53 mins ago









                            ReinderienReinderien

                            3,977821




                            3,977821






























                                draft saved

                                draft discarded




















































                                Thanks for contributing an answer to Code Review Stack Exchange!


                                • Please be sure to answer the question. Provide details and share your research!

                                But avoid



                                • Asking for help, clarification, or responding to other answers.

                                • Making statements based on opinion; back them up with references or personal experience.


                                Use MathJax to format equations. MathJax reference.


                                To learn more, see our tips on writing great answers.





                                Some of your past answers have not been well-received, and you're in danger of being blocked from answering.


                                Please pay close attention to the following guidance:


                                • Please be sure to answer the question. Provide details and share your research!

                                But avoid



                                • Asking for help, clarification, or responding to other answers.

                                • Making statements based on opinion; back them up with references or personal experience.


                                To learn more, see our tips on writing great answers.




                                draft saved


                                draft discarded














                                StackExchange.ready(
                                function () {
                                StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fcodereview.stackexchange.com%2fquestions%2f211022%2farbitrary-dice-with-probability%23new-answer', 'question_page');
                                }
                                );

                                Post as a guest















                                Required, but never shown





















































                                Required, but never shown














                                Required, but never shown












                                Required, but never shown







                                Required, but never shown

































                                Required, but never shown














                                Required, but never shown












                                Required, but never shown







                                Required, but never shown







                                Popular posts from this blog

                                濃尾地震

                                How to rewrite equation of hyperbola in standard form

                                No ethernet ip address in my vocore2