RNG; One variable must not be equal to another
 RNG; One variable must not be equal to another DavidRobinsons Programmer named Tim Posts: 6 Threads: 3 Joined: Oct 2018 Reputation: 0 Oct-09-2018, 04:48 AM I am still studying about importing modules, and suddenly I came with an idea of a random number generator which will generate a six-number combination out of numbers within a specified range. I am going to insert a specific portion of my codes ```from random import * die1 = randint(1,42) die2 = randint(1,42) die3 = randint(1,42) die4 = randint(1,42) die5 = randint(1,42) die6 = randint(1,42) print("For 6/42: ", die1, "-", die2, "-", die3, "-", die4, "-", die5, "-", die6)```I want to make the resulting numbers non-repeating, which means if die1 picked 5, the other variables must not pick 5. That goes for the other variables as well. How will I make it? The book I am using as reference haven't mentioned how to do so. Reply Posts: 7,186 Threads: 124 Joined: Sep 2016 Reputation: 549 Oct-09-2018, 07:11 AM (This post was last modified: Oct-09-2018, 07:11 AM by buran.) first of all repetitive code like above is really poor idea and should be avoided. check itertools.combinations() and use random.choice() to get randomly one combination more naive approach would be to keep a list of numbers already drawn and keep drawing random numbers until you have 6 distinct numbers. here you may also use set. If you can't explain it to a six year old, you don't understand it yourself, Albert Einstein How to Ask Questions The Smart Way: link and another link Create MCV example Debug small programs Reply DavidRobinsons Programmer named Tim Posts: 6 Threads: 3 Joined: Oct 2018 Reputation: 0 Oct-09-2018, 09:12 AM I know that repetitive codes is a bad idea. However I just started learning Python few days ago on a casual basis, hence I still don't know a lot of possible codes for this language, forcing me to repeat some lines of codes. Reply micseydel Involuntary Spiderweb Collector Posts: 2,337 Threads: 60 Joined: Sep 2016 Reputation: 72 Oct-09-2018, 10:31 PM Using combinations() here is clever but wouldn't scale. What you want is "sampling without replacement" and the easiest way to do that would be with a numpy function which allows you to set replacement to False. Apparently Python's random module doesn't have this built-in, which is somewhat unfortunate. If you don't mind adding a dependency, I'd use numpy. Otherwise the random number generation and set checking is probably what I would do. As a third option, you could consider using the built-in random.shuffle() one time and then popping (this would be less efficient than set-checking, but more efficient than combinations). Feel like you're not getting the answers you want? Checkout the help/rules for things like what to include/not include in a post, how to use code tags, how to ask smart questions, and more. Pro-tip - there's an inverse correlation between the number of lines of code posted and my enthusiasm for helping with a question :) Reply ichabod801 Bunny Rabbit Posts: 4,231 Threads: 97 Joined: Sep 2016 Reputation: 273 Oct-09-2018, 10:49 PM 1 to 42 with no repeats? Sounds more like a lottery number. Craig "Ichabod" O'Brien - xenomind.com I wish you happiness. Recommended Tutorials: BBCode, functions, classes, text adventures Reply DavidRobinsons Programmer named Tim Posts: 6 Threads: 3 Joined: Oct 2018 Reputation: 0 Oct-09-2018, 11:20 PM (Oct-09-2018, 10:49 PM)ichabod801 Wrote: 1 to 42 with no repeats? Sounds more like a lottery number. Yep, it is. Just for fun thing Reply DavidRobinsons Programmer named Tim Posts: 6 Threads: 3 Joined: Oct 2018 Reputation: 0 Oct-10-2018, 12:39 AM (Oct-09-2018, 10:31 PM)micseydel Wrote: Using combinations() here is clever but wouldn't scale. What you want is "sampling without replacement" and the easiest way to do that would be with a numpy function which allows you to set replacement to False. Apparently Python's random module doesn't have this built-in, which is somewhat unfortunate. If you don't mind adding a dependency, I'd use numpy. Otherwise the random number generation and set checking is probably what I would do. As a third option, you could consider using the built-in random.shuffle() one time and then popping (this would be less efficient than set-checking, but more efficient than combinations). I am starting to think last night that the thing I want to happen is beyond me for now, and I am starting to give up. But thanks for suggesting me three options, I'll look to them. Reply micseydel Involuntary Spiderweb Collector Posts: 2,337 Threads: 60 Joined: Sep 2016 Reputation: 72 Oct-10-2018, 12:40 AM With numpy, it's very simple ```>>> import numpy >>> '-'.join(map(str, numpy.random.choice(range(1, 43), 6, replace=False))) '13-36-12-7-25-31'``` Feel like you're not getting the answers you want? Checkout the help/rules for things like what to include/not include in a post, how to use code tags, how to ask smart questions, and more. Pro-tip - there's an inverse correlation between the number of lines of code posted and my enthusiasm for helping with a question :) Reply Posts: 7,186 Threads: 124 Joined: Sep 2016 Reputation: 549 Oct-10-2018, 01:39 AM @micseydel is right that it wouldn't scale uf using itertool.combinations. Didn't think of it... I like the idea for using shuffle() If you can't explain it to a six year old, you don't understand it yourself, Albert Einstein How to Ask Questions The Smart Way: link and another link Create MCV example Debug small programs Reply ichabod801 Bunny Rabbit Posts: 4,231 Threads: 97 Joined: Sep 2016 Reputation: 273 Oct-10-2018, 01:39 AM It's simpler with random, since random comes with Python. ```import random balls = '-'.join(map(str, random.sample(range(1, 43), 6)))``` Craig "Ichabod" O'Brien - xenomind.com I wish you happiness. Recommended Tutorials: BBCode, functions, classes, text adventures Reply

 Possibly Related Threads… Thread Author Replies Views Last Post How to extract previous and current rows if their value is equal SriRajesh 5 1,659 Jun-18-2018, 08:09 PM Last Post: volcano63 Conditional If Statement: If value contains string then set another column equal to s Jack_Sparrow 2 2,387 Jun-15-2018, 03:33 PM Last Post: snippsat linspace not dividing equal intervals sheel 0 1,153 Jan-16-2018, 04:28 PM Last Post: sheel

Forum Jump:

User Panel Messages

Announcements
Announcement #1 8/1/2020
Announcement #2 8/2/2020
Announcement #3 8/6/2020