473,320 Members | 1,974 Online
Bytes | Software Development & Data Engineering Community
Post Job

Home Posts Topics Members FAQ

Join Bytes to post your question to a community of 473,320 software developers and data experts.

Not Equal to Each Other?

Another question: I am writing a sudoku solving program. The
'solving' part of is just multiple iterations. It will take random
numbers and keep switching it all around until a set of logic
statements has been met (ie; all numbers in a row are not equal to each
other) ... that's where my question comes in.

Cellboard = my list for storing each row/column's data.

Rather than writing

cellboard[0] is not* (cellboard[1] and cellboard[2] and cellboard[3]
and cellboard[4] ... cellboard[8])
cellboard[1] is not (cellboard[0] and cellboard[2] and cellboard[3] and
cellboard[4] ... cellboard[8])
etc...

* should this be != ?

the above so that all the data in one row is not equal to each other,
is there something I can write to make it simpler? For example,
(cellboard[0] is not cellboard[1] is not ... cellboard[8]) only worked
for the numbers to the left and right of the cell - is there anyway I
can expand this to cover all numbers in a set range?

Nov 4 '05 #1
7 4355
On 3 Nov 2005 17:01:08 -0800, al***********@gmail.com
<al***********@gmail.com> wrote:
the above so that all the data in one row is not equal to each other,
is there something I can write to make it simpler? For example,
(cellboard[0] is not cellboard[1] is not ... cellboard[8]) only worked
for the numbers to the left and right of the cell - is there anyway I
can expand this to cover all numbers in a set range?


Python has an operator call 'in', which will allow you to do what you're after.

"1 in (1,2,3)" will be true
"4 in (1,2,3)" will be false
"not 1 in (1,2,3)" will be false

So you'd be after something along the lines of:
not cellboard[0] in (cellboard[1], ...., celboard[8]).

This seems quite tedious to write, maybe you should consider something
along the lines of using slicing:

not celboard[0] in cellboard[1:8]

I hope i have given you enough tools to do what you're trying to do.

--
Stephen Thorne
Development Engineer
Nov 4 '05 #2
<al***********@gmail.com> wrote:
...
Rather than writing

cellboard[0] is not* (cellboard[1] and cellboard[2] and cellboard[3]
and cellboard[4] ... cellboard[8])
cellboard[1] is not (cellboard[0] and cellboard[2] and cellboard[3] and
cellboard[4] ... cellboard[8])


Urgh... the fastest way to check that a list of N numbers has no
duplicates is:
if len(set(thelist)) == len(thelist):
print 'no duplicates'

But if your purpose is to generate N random samples out of a population
of M, look at function random.sample (in module random in the Pythons
standard library) and you'll do even better!-)
Alex
Nov 4 '05 #3
For the

not cellboard[0] in cellboard[1:8] (I knew about ranges/slicing using a
colon, can't believe I didn't think of that!)

line, will I have to write that out for each number?

So the line:

not cellboard in ((cellboard[1:8]) and (cellboard[9] and cellboard[18]
and cellboard[27] and cellboard[36] and cellboard[45] and cellboard[54]
and cellboard[63] and cellboard[72]) and (cellboard[1:2] and
cellboard[9:11] and cellboard[18:20]))

will cover all the logic requirements for the number in cell 0 (well,
row 1, column 1).

But will I have to copy + paste + edit that for all 81 cells? That
isn't complicated, just tedious - thanks though.

Nov 4 '05 #4
On 3 Nov 2005 17:01:08 -0800, al***********@gmail.com wrote:
Another question: I am writing a sudoku solving program. The
'solving' part of is just multiple iterations. It will take random
numbers and keep switching it all around until a set of logic
statements has been met (ie; all numbers in a row are not equal to each
other) ... that's where my question comes in.

Cellboard = my list for storing each row/column's data.

Rather than writing

cellboard[0] is not* (cellboard[1] and cellboard[2] and cellboard[3]
and cellboard[4] ... cellboard[8])
cellboard[1] is not (cellboard[0] and cellboard[2] and cellboard[3] and
cellboard[4] ... cellboard[8])
etc...

* should this be != ?

the above so that all the data in one row is not equal to each other,
is there something I can write to make it simpler? For example,
(cellboard[0] is not cellboard[1] is not ... cellboard[8]) only worked
for the numbers to the left and right of the cell - is there anyway I
can expand this to cover all numbers in a set range?


UIAM if you have a list of items that are comparable and hashable, like integers,
you can make a set of the list, and duplicates will be eliminated in the set.
Therefore if the resulting set has the same number of members as the list it
was made from, you can conclude that the list contains no duplicates. E.g.,
cellboard = range(8)
cellboard [0, 1, 2, 3, 4, 5, 6, 7] set(cellboard) set([0, 1, 2, 3, 4, 5, 6, 7]) len(set(cellboard)) 8 cellboard[2] = 7
cellboard [0, 1, 7, 3, 4, 5, 6, 7] set(cellboard) set([0, 1, 3, 4, 5, 6, 7]) len(set(cellboard)) 7

So the test would be len(set(cellboard))==len(cellboard) False
And after repairing the list to uniqueness of elements: cellboard[2] = 2
len(set(cellboard))==len(cellboard)

True

HTH

Regards,
Bengt Richter
Nov 4 '05 #5
How do I 'define' set? Is there something to include (like import
random)?

while (choice == 3) and len(set(cellboard[0:8]))==len(cellboard[0:8]):
# DEFINE TWO RANDOM VARIABLES (ONE FOR ARRAY, ONE FOR NUMBER
VALUE)
solvingrandom = random.randint(1,9)
cellboardrandom = random.randint(0,8)
set(cellboard[0:8])

# CHECK TO MAKE SURE THE RANDOMLY ASSIGNED CELL DOES NOT HAVE A
VALUE
if (cellboard[cellboardrandom] is not ('1' or '2' or '3' or '4'
or '5' or '6' or '7' or '8' or '9')):
cellboard[cellboardrandom] = solvingrandom

The above is my code (right now it will only work for the first row's
numbers). Anything else I need to add?

Nov 4 '05 #6
al***********@gmail.com wrote:
How do I 'define' set? Is there something to include (like import
random)?
set is a built-in type in Python 2.4
If you use 2.3 you can use the sets module with "import sets"

while (choice == 3) and len(set(cellboard[0:8]))==len(cellboard[0:8]):
# DEFINE TWO RANDOM VARIABLES (ONE FOR ARRAY, ONE FOR NUMBER
VALUE)
solvingrandom = random.randint(1,9)
cellboardrandom = random.randint(0,8)
set(cellboard[0:8])

# CHECK TO MAKE SURE THE RANDOMLY ASSIGNED CELL DOES NOT HAVE A
VALUE
if (cellboard[cellboardrandom] is not ('1' or '2' or '3' or '4'
or '5' or '6' or '7' or '8' or '9')):
cellboard[cellboardrandom] = solvingrandom

The above is my code (right now it will only work for the first row's
numbers). Anything else I need to add?

Simplify your code a bit:

'2' is not ('1' or '2' or '3' or '4' or '5' or '6' or '7' or '8' or '9')
evaluates to True
'1' is not ('1' or '2' or '3' or '4' or '5' or '6' or '7' or '8' or '9')
evaluates to False
Somehow I do not believe you want that behavipur.

If cellboard contains characters, you could use:
if (cellboard[cellboardrandom] not in '123456789')

for integers, the following should work:
if not (1 <= cellboard[cellboardrandom] <= 9)

Using None to code empty cells, you could even have:
if (cellboard[cellboardrandom] is None)
Nov 4 '05 #7
> will I have to write that out for each number?

Not if you know how to use the 'for' statement. It will allow you to
iterate through the rows or columns or whatnot.

Nov 4 '05 #8

This thread has been closed and replies have been disabled. Please start a new discussion.

Similar topics

4
by: Jeremy Howard | last post by:
Hello everyone, I'm not a database guru so I'm sorry if this is a dumb question but here it goes... I have this sql query that I'm trying to run against a table on a Sql 2k server: SELECT ...
8
by: Ayende Rahien | last post by:
I've a really strange problem, in some part of my code I compare two strings (through object), and while I *know* that they equal each other, and in the watch window they do equal each other, then...
6
by: veerleverbr | last post by:
Hi, I have the following html: <div id="content"> <div id="leftpart">...</div> <div id="rightpart">...</div> </div> leftpart en rightpart are in the css set to float left. The content of...
1
by: Glen Welsh via AccessMonster.com | last post by:
I am trying to set a control to equal the last value entered for that control on the previous form. In other words: I have a control called HullNumber, which will remain constant for approximately...
2
by: Ed Sutton | last post by:
I have variables that are declared as objects. Ints, strings and other data types are then assigned to these objects. How can I write a compare objects function? I tried objOne==objTwo. I am...
7
by: Piper707 | last post by:
Hi, I need to know how I can check to see if a particular node is NOT equal to a SET of values. i.e. a valid form of : <xsl:template match!="H" && match!="Y"&& match!="Z"> I have an XML...
5
by: Yves Glodt | last post by:
Hello, I need to compare 2 instances of objects to see whether they are equal or not, but with the code down it does not work (it outputs "not equal") #!/usr/bin/python class Test:
17
by: Mark A | last post by:
DB2 8.2 for Linux, FP 10 (also performs the same on DB2 8.2 for Windoes, FP 11). Using the SAMPLE database, tables EMP and EMLOYEE. In the followng stored procedure, 2 NULL columns (COMM) are...
14
by: serge calderara | last post by:
Dear all, What is the proper way to check if two object are equal ? I do not mean equal on Object type only but also object value's thnaks for help regards serge
0
by: DolphinDB | last post by:
The formulas of 101 quantitative trading alphas used by WorldQuant were presented in the paper 101 Formulaic Alphas. However, some formulas are complex, leading to challenges in calculation. Take...
0
by: ryjfgjl | last post by:
ExcelToDatabase: batch import excel into database automatically...
0
isladogs
by: isladogs | last post by:
The next Access Europe meeting will be on Wednesday 6 Mar 2024 starting at 18:00 UK time (6PM UTC) and finishing at about 19:15 (7.15PM). In this month's session, we are pleased to welcome back...
0
by: Vimpel783 | last post by:
Hello! Guys, I found this code on the Internet, but I need to modify it a little. It works well, the problem is this: Data is sent from only one cell, in this case B5, but it is necessary that data...
1
by: PapaRatzi | last post by:
Hello, I am teaching myself MS Access forms design and Visual Basic. I've created a table to capture a list of Top 30 singles and forms to capture new entries. The final step is a form (unbound)...
0
by: CloudSolutions | last post by:
Introduction: For many beginners and individual users, requiring a credit card and email registration may pose a barrier when starting to use cloud servers. However, some cloud server providers now...
0
by: Defcon1945 | last post by:
I'm trying to learn Python using Pycharm but import shutil doesn't work
1
by: Shællîpôpï 09 | last post by:
If u are using a keypad phone, how do u turn on JavaScript, to access features like WhatsApp, Facebook, Instagram....
0
by: af34tf | last post by:
Hi Guys, I have a domain whose name is BytesLimited.com, and I want to sell it. Does anyone know about platforms that allow me to list my domain in auction for free. Thank you

By using Bytes.com and it's services, you agree to our Privacy Policy and Terms of Use.

To disable or enable advertisements and analytics tracking please visit the manage ads & tracking page.