Python Forum
Problem with "while and a string of characters
Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Problem with "while and a string of characters
#1
Hi !

My python code :
ligne1 = [2,0,1,5,1,1,5,1,4,0,1,1,2,4,5,3,1,4]                   #  creation des tableaux 
ligne2 = [0,0,0,5,1,2,3,2,2,5,3,3,4,4,4,3,5,2]
ligne3 = [3,0,4,0,4,0,1,5,5,3,3,2,3,1,0,2,5,4]
   
print(ligne1)
print(ligne2)
print(ligne3)
print("")

def faceblanche90(ligne1,ligne2,ligne3):       #  rotation face blanche UNIQUEMENT dans l'environnement virtuel
   m = ligne1[0]
   ligne1[0] = ligne3[0]
   ligne3[0] = ligne3[2]
   ligne3[2] = ligne1[2]
   ligne1[2] = m
   m = ligne1[1]
   ligne1[1] = ligne2[0]
   ligne2[0] = ligne3[1]
   ligne3[1] = ligne2[2]
   ligne2[2] = m
   m = ligne3[9]
   ligne3[9] = ligne3[15]
   ligne3[15] = ligne1[5]
   ligne1[5] = ligne1[14]
   ligne1[14] = m
   m = ligne3[11]
   ligne3[11] = ligne3[17]
   ligne3[17] = ligne1[3]
   ligne1[3] = ligne1[12]
   ligne1[12] = m
   m = ligne3[10]
   ligne3[10] = ligne3[16]
   ligne3[16] = ligne1[4]
   ligne1[4] = ligne1[13]
   ligne1[13] = m
   return ligne1,ligne2,ligne3

def facerouge90(ligne1,ligne2,ligne3):           #  rotation face rouge UNIQUEMENT dans l'environnement virtuel
   m = ligne1[3]
   ligne1[3] = ligne3[3]
   ligne3[3] = ligne3[5]
   ligne3[5] = ligne1[5]
   ligne1[5] = m
   m = ligne1[4]
   ligne1[4] = ligne2[3]
   ligne2[3] = ligne3[4]
   ligne3[4] = ligne2[5]
   ligne2[5] = m
   m = ligne3[0]
   ligne3[0] = ligne1[15]
   ligne1[15] = ligne1[8]
   ligne1[8] = ligne1[12]
   ligne1[12] = m
   m = ligne3[2]
   ligne3[2] = ligne3[15]
   ligne3[15] = ligne1[6]
   ligne1[6] = ligne3[12]
   ligne3[12] = m
   m = ligne3[1]
   ligne3[1] = ligne2[15]
   ligne2[15] = ligne1[7]
   ligne1[7] = ligne2[12]
   ligne2[12] = m
   return ligne1,ligne2,ligne3

def facejaune90(ligne1,ligne2,ligne3):             #  rotation face jaune UNIQUEMENT dans l'environnement virtuel
   m = ligne1[6]
   ligne1[6] = ligne3[6]
   ligne3[6] = ligne3[8]
   ligne3[8] = ligne1[8]
   ligne1[8] = m
   m = ligne1[7]
   ligne1[7] = ligne2[6]
   ligne2[6] = ligne3[7]
   ligne3[7] = ligne2[8]
   ligne2[8] = m
   m = ligne3[3]
   ligne3[3] = ligne1[17]
   ligne1[17] = ligne1[11]
   ligne1[11] = ligne3[12]
   ligne3[12] = m
   m = ligne3[4]
   ligne3[4] = ligne1[16]
   ligne1[16] = ligne1[10]
   ligne1[10] = ligne3[13]
   ligne3[13] = m
   m = ligne3[5]
   ligne3[5] = ligne1[15]
   ligne1[15] = ligne1[9]
   ligne1[9] = ligne3[14]
   ligne3[14] = m
   return ligne1,ligne2,ligne3

def faceorange90(ligne1,ligne2,ligne3):              #  rotation face orange UNIQUEMENT dans l'environnement virtuel
   m = ligne1[9]
   ligne1[9] = ligne3[9]
   ligne3[9] = ligne3[11]
   ligne3[11] = ligne1[11]
   ligne1[11] = m
   m = ligne1[10]
   ligne1[10] = ligne2[9]
   ligne2[9] = ligne3[10]
   ligne3[10] = ligne2[11]
   ligne2[11] = m
   m = ligne3[6]
   ligne3[6] = ligne3[17]
   ligne3[17] = ligne1[2]
   ligne1[2] = ligne3[14]
   ligne3[14] = m
   m = ligne3[7]
   ligne3[7] = ligne2[17]
   ligne2[17] = ligne1[1]
   ligne1[1] = ligne2[14]
   ligne2[14] = m
   m = ligne3[8]
   ligne3[8] = ligne1[17]
   ligne1[17] = ligne1[0]
   ligne1[0] = ligne1[14]
   ligne1[14] = m
   return ligne1,ligne2,ligne3
   
def facebleue90(ligne1,ligne2,ligne3):                   #  rotation face bleue UNIQUEMENT dans l'environnement virtuel
   m = ligne1[12]
   ligne1[12] = ligne3[12]
   ligne3[12] = ligne3[14]
   ligne3[14] = ligne1[14]
   ligne1[14] = m
   m = ligne1[13]
   ligne1[13] = ligne2[12]
   ligne2[12] = ligne3[13]
   ligne3[13] = ligne2[14]
   ligne2[14] = m
   m = ligne3[2]
   ligne3[2] = ligne3[5]
   ligne3[5] = ligne3[8]
   ligne3[8] = ligne3[11]
   ligne3[11] = m
   m = ligne2[2]
   ligne2[2] = ligne2[5]
   ligne2[5] = ligne2[8]
   ligne2[8] = ligne2[11]
   ligne2[11] = m
   m = ligne1[2]
   ligne1[2] = ligne1[5]
   ligne1[5] = ligne1[8]
   ligne1[8] = ligne1[11]
   ligne1[11] = m
   return ligne1,ligne2,ligne3

def faceverte90(ligne1,ligne2,ligne3):                    #  rotation face verte UNIQUEMENT dans l'environnement virtuel
   m = ligne1[15]
   ligne1[15] = ligne3[15]
   ligne3[15] = ligne3[17]
   ligne3[17] = ligne1[17]
   ligne1[17] = m
   m = ligne1[16]
   ligne1[16] = ligne2[15]
   ligne2[15] = ligne3[16]
   ligne3[16] = ligne2[17]
   ligne2[17] = m
   m = ligne1[6]
   ligne1[6] = ligne1[3]
   ligne1[3] = ligne1[0]
   ligne1[0] = ligne1[9]
   ligne1[9] = m
   m = ligne2[6]
   ligne2[6] = ligne2[3]
   ligne2[3] = ligne2[0]
   ligne2[0] = ligne2[9]
   ligne2[9] = m
   m = ligne3[6]
   ligne3[6] = ligne3[3]
   ligne3[3] = ligne3[0]
   ligne3[0] = ligne3[9]
   ligne3[9] = m
   return ligne1,ligne2,ligne3
   
def faceblanche270(ligne1,ligne2,ligne3):
   for i in range(0,3,1):
      ligne1,ligne2,ligne3 = faceblanche90(ligne1,ligne2,ligne3)
   return ligne1,ligne2,ligne3

def facerouge270(ligne1,ligne2,ligne3):
   for i in range(0,3,1):
      ligne1,ligne2,ligne3 = facerouge90(ligne1,ligne2,ligne3)
   return ligne1,ligne2,ligne3
   
def facejaune270(ligne1,ligne2,ligne3):
   for i in range(0,3,1):
      ligne1,ligne2,ligne3 = facejaune90(ligne1,ligne2,ligne3)
   return ligne1,ligne2,ligne3
   
def faceorange270(ligne1,ligne2,ligne3):
   for i in range(0,3,1):
      ligne1,ligne2,ligne3 = faceorange90(ligne1,ligne2,ligne3)
   return ligne1,ligne2,ligne3
   
def facebleue270(ligne1,ligne2,ligne3):
   for i in range(0,3,1):
      ligne1,ligne2,ligne3 = facebleue90(ligne1,ligne2,ligne3)
   return ligne1,ligne2,ligne3
   
def faceverte270(ligne1,ligne2,ligne3):
   for i in range(0,3,1):
      ligne1,ligne2,ligne3 = faceverte90(ligne1,ligne2,ligne3)
   return ligne1,ligne2,ligne3

m=ligne1[8]**2+ligne3[5]**2+ligne3[12]**2
while m!=17:
   ligne1,ligne2,ligne3 = facejaune90(ligne1,ligne2,ligne3)
   m=ligne1[8]**2+ligne3[5]**2+ligne3[12]**2
while ligne1[5]!=1 and ligne3[2]!=0 and ligne1[12]!=4:
   ligne1,ligne2,ligne3 = facerouge90(ligne1,ligne2,ligne3)
   ligne1,ligne2,ligne3 = facejaune90(ligne1,ligne2,ligne3)
   ligne1,ligne2,ligne3 = facerouge270(ligne1,ligne2,ligne3)
   ligne1,ligne2,ligne3 = facejaune270(ligne1,ligne2,ligne3)
print(ligne1)
print(ligne2)
print(ligne3)
The output :
Output:
[2, 0, 1, 5, 1, 1, 5, 1, 4, 0, 1, 1, 2, 4, 5, 3, 1, 4] [0, 0, 0, 5, 1, 2, 3, 2, 2, 5, 3, 3, 4, 4, 4, 3, 5, 2] [3, 0, 4, 0, 4, 0, 1, 5, 5, 3, 3, 2, 3, 1, 0, 2, 5, 4] [2, 0, 1, 5, 1, 1, 5, 5, 1, 0, 4, 0, 2, 4, 5, 0, 1, 3] [0, 0, 0, 5, 1, 2, 2, 2, 3, 5, 3, 3, 4, 4, 4, 3, 5, 2] [3, 0, 4, 1, 1, 0, 4, 1, 5, 3, 3, 2, 4, 1, 3, 2, 5, 4]
My problem : I don't understand why I don't have ligne3[2]=0 , ligne1[3]=1 and ligne1[12]=4. May be it is stupid.
I'm a young beginner in the python. (and I don't speak English very well too, sorry)

Can you help me please ?
Thank's for reading,
Faosry.
Reply
#2
I hardly looked at it and already strongly suspect it's this annoying "list parameters are references to external list not unique copies, so editing a list in a function will edit the external list as well". So you have to do this retarded workaround:
import copy #top of script
#then at function, deepcopy the lists so they are unique not references
def faceblanche90(REFligne1,REFligne2,REFligne3):
    ligne1=copy.deepcopy(REFligne1)
    ligne2=copy.deepcopy(REFligne2)
    ligne3=copy.deepcopy(REFligne3)
lemme know if that was the problem, its such a common snag I bet it was
Reply
#3
Okay, thanks but with this :

ligne1 = [2,0,5,5,1,4,4,2,1,3,5,3,2,4,2,1,4,4]                 
ligne2 = [0,0,0,5,1,3,1,2,2,5,3,2,4,4,1,3,5,2]
ligne3 = [3,0,3,0,4,5,0,1,0,4,3,1,0,3,5,2,5,1]

def facejaune90(ligne1,ligne2,ligne3):         
   m = ligne1[6]
   ligne1[6] = ligne3[6]
   ligne3[6] = ligne3[8]
   ligne3[8] = ligne1[8]
   ligne1[8] = m
   m = ligne1[7]
   ligne1[7] = ligne2[6]
   ligne2[6] = ligne3[7]
   ligne3[7] = ligne2[8]
   ligne2[8] = m
   m = ligne3[3]
   ligne3[3] = ligne1[17]
   ligne1[17] = ligne1[11]
   ligne1[11] = ligne3[12]
   ligne3[12] = m
   m = ligne3[4]
   ligne3[4] = ligne1[16]
   ligne1[16] = ligne1[10]
   ligne1[10] = ligne3[13]
   ligne3[13] = m
   m = ligne3[5]
   ligne3[5] = ligne1[15]
   ligne1[15] = ligne1[9]
   ligne1[9] = ligne3[14]
   ligne3[14] = m
   return ligne1,ligne2,ligne3

while (ligne1[8]!=4 and ligne3[5]!=1 and ligne3[12]!=0):
   ligne1,ligne2,ligne3 = facejaune90(ligne1,ligne2,ligne3)
   print("recherche en cours...")
print(ligne1)
print(ligne2)
print(ligne3)
The program not going in the "while". Why ? The conditions are true, so he must go inside. I don't understand...
Reply
#4
I solved my problem.
Reply
#5
Because ligne3[12] is equal 0.
Reply


Possibly Related Threads…
Thread Author Replies Views Last Post
  doing string split with 2 or more split characters Skaperen 22 2,486 Aug-13-2023, 01:57 AM
Last Post: Skaperen
  How do I check if the first X characters of a string are numbers? FirstBornAlbratross 6 1,521 Apr-12-2023, 10:39 AM
Last Post: jefsummers
  Convert string to float problem vasik006 8 3,392 Jun-03-2022, 06:41 PM
Last Post: deanhystad
Question [SOLVED] Delete specific characters from string lines EnfantNicolas 4 2,203 Oct-21-2021, 11:28 AM
Last Post: EnfantNicolas
  f string concatenation problem growSeb 3 2,247 Jun-28-2021, 05:00 AM
Last Post: buran
Question Problem with string and \n Falassion 6 2,676 Jun-15-2021, 03:59 PM
Last Post: Falassion
  Extract continuous numeric characters from a string in Python Robotguy 2 2,631 Jan-16-2021, 12:44 AM
Last Post: snippsat
  how to deal with problem of converting string to int usthbstar 1 1,967 Jan-05-2021, 01:33 PM
Last Post: perfringo
  Python win32api keybd_event: How do I input a string of characters? JaneTan 3 3,804 Oct-19-2020, 04:16 AM
Last Post: deanhystad
  string problem Mathisdlg 6 2,842 Aug-05-2020, 09:31 AM
Last Post: Mathisdlg

Forum Jump:

User Panel Messages

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