Infinite loop while trying to determine the injectivity of a list [duplicate]












0
















This question already has an answer here:




  • Convert from “For-loops” to “While-loops”

    3 answers




For a school work, we have to create a function that determines if a list is injective, which returns True or False. 2 ways of doing the job are recommended : with 'for' loops and with 'while' loops. I managed to program with 'for' loops, but I'm having issues with 'while' loops, as i cannot figure out why mine is infinite.



I'll put my code below. I already tried getting rid of few variables that where needless, and as I modify the value of 'a' within the loop, it seems to me there is nothing wrong on paper.



def injective(x):  
i=0
k=i+1
a=True
while i<len(L)-1 : #L is the name of the list
while k<len(L) :
if L[i]==L[k] :
a=False
else :
a=True
i+=1
return a


I expect to get True when the list is injective and False when not










share|improve this question













marked as duplicate by Community Dec 28 '18 at 18:25


This question has been asked before and already has an answer. If those answers do not fully address your question, please ask a new question.











  • 1





    put k+=1 inside while k<len(L) loop and i+=1 in outer while loop

    – prashant rana
    Dec 28 '18 at 18:04











  • L is x or something else?

    – Anto Jurković
    Dec 28 '18 at 18:04











  • converting a for loop to a while loop would be an easier approach if you have that working. anyways, your innermost loop is never modifying the value of k so the condition never becomes false. as a tip, if you can do it in a for loop, make sure you convert each for loop to a while loop by resetting and incrementing at the right levels.

    – Paritosh Singh
    Dec 28 '18 at 18:04













  • Thank you for the help I see what i forgot.

    – kiki fer
    Dec 28 '18 at 18:08











  • The title given to your question is unlikely to be useful for anybody searching for answers about a similar problem. The question not abot injectivity of a list, but about how to convert for loops to while loops. This already has answers on SO, e.g. here.

    – Adrian W
    Dec 28 '18 at 18:12
















0
















This question already has an answer here:




  • Convert from “For-loops” to “While-loops”

    3 answers




For a school work, we have to create a function that determines if a list is injective, which returns True or False. 2 ways of doing the job are recommended : with 'for' loops and with 'while' loops. I managed to program with 'for' loops, but I'm having issues with 'while' loops, as i cannot figure out why mine is infinite.



I'll put my code below. I already tried getting rid of few variables that where needless, and as I modify the value of 'a' within the loop, it seems to me there is nothing wrong on paper.



def injective(x):  
i=0
k=i+1
a=True
while i<len(L)-1 : #L is the name of the list
while k<len(L) :
if L[i]==L[k] :
a=False
else :
a=True
i+=1
return a


I expect to get True when the list is injective and False when not










share|improve this question













marked as duplicate by Community Dec 28 '18 at 18:25


This question has been asked before and already has an answer. If those answers do not fully address your question, please ask a new question.











  • 1





    put k+=1 inside while k<len(L) loop and i+=1 in outer while loop

    – prashant rana
    Dec 28 '18 at 18:04











  • L is x or something else?

    – Anto Jurković
    Dec 28 '18 at 18:04











  • converting a for loop to a while loop would be an easier approach if you have that working. anyways, your innermost loop is never modifying the value of k so the condition never becomes false. as a tip, if you can do it in a for loop, make sure you convert each for loop to a while loop by resetting and incrementing at the right levels.

    – Paritosh Singh
    Dec 28 '18 at 18:04













  • Thank you for the help I see what i forgot.

    – kiki fer
    Dec 28 '18 at 18:08











  • The title given to your question is unlikely to be useful for anybody searching for answers about a similar problem. The question not abot injectivity of a list, but about how to convert for loops to while loops. This already has answers on SO, e.g. here.

    – Adrian W
    Dec 28 '18 at 18:12














0












0








0









This question already has an answer here:




  • Convert from “For-loops” to “While-loops”

    3 answers




For a school work, we have to create a function that determines if a list is injective, which returns True or False. 2 ways of doing the job are recommended : with 'for' loops and with 'while' loops. I managed to program with 'for' loops, but I'm having issues with 'while' loops, as i cannot figure out why mine is infinite.



I'll put my code below. I already tried getting rid of few variables that where needless, and as I modify the value of 'a' within the loop, it seems to me there is nothing wrong on paper.



def injective(x):  
i=0
k=i+1
a=True
while i<len(L)-1 : #L is the name of the list
while k<len(L) :
if L[i]==L[k] :
a=False
else :
a=True
i+=1
return a


I expect to get True when the list is injective and False when not










share|improve this question















This question already has an answer here:




  • Convert from “For-loops” to “While-loops”

    3 answers




For a school work, we have to create a function that determines if a list is injective, which returns True or False. 2 ways of doing the job are recommended : with 'for' loops and with 'while' loops. I managed to program with 'for' loops, but I'm having issues with 'while' loops, as i cannot figure out why mine is infinite.



I'll put my code below. I already tried getting rid of few variables that where needless, and as I modify the value of 'a' within the loop, it seems to me there is nothing wrong on paper.



def injective(x):  
i=0
k=i+1
a=True
while i<len(L)-1 : #L is the name of the list
while k<len(L) :
if L[i]==L[k] :
a=False
else :
a=True
i+=1
return a


I expect to get True when the list is injective and False when not





This question already has an answer here:




  • Convert from “For-loops” to “While-loops”

    3 answers








python loops






share|improve this question













share|improve this question











share|improve this question




share|improve this question










asked Dec 28 '18 at 18:01









kiki ferkiki fer

33




33




marked as duplicate by Community Dec 28 '18 at 18:25


This question has been asked before and already has an answer. If those answers do not fully address your question, please ask a new question.






marked as duplicate by Community Dec 28 '18 at 18:25


This question has been asked before and already has an answer. If those answers do not fully address your question, please ask a new question.










  • 1





    put k+=1 inside while k<len(L) loop and i+=1 in outer while loop

    – prashant rana
    Dec 28 '18 at 18:04











  • L is x or something else?

    – Anto Jurković
    Dec 28 '18 at 18:04











  • converting a for loop to a while loop would be an easier approach if you have that working. anyways, your innermost loop is never modifying the value of k so the condition never becomes false. as a tip, if you can do it in a for loop, make sure you convert each for loop to a while loop by resetting and incrementing at the right levels.

    – Paritosh Singh
    Dec 28 '18 at 18:04













  • Thank you for the help I see what i forgot.

    – kiki fer
    Dec 28 '18 at 18:08











  • The title given to your question is unlikely to be useful for anybody searching for answers about a similar problem. The question not abot injectivity of a list, but about how to convert for loops to while loops. This already has answers on SO, e.g. here.

    – Adrian W
    Dec 28 '18 at 18:12














  • 1





    put k+=1 inside while k<len(L) loop and i+=1 in outer while loop

    – prashant rana
    Dec 28 '18 at 18:04











  • L is x or something else?

    – Anto Jurković
    Dec 28 '18 at 18:04











  • converting a for loop to a while loop would be an easier approach if you have that working. anyways, your innermost loop is never modifying the value of k so the condition never becomes false. as a tip, if you can do it in a for loop, make sure you convert each for loop to a while loop by resetting and incrementing at the right levels.

    – Paritosh Singh
    Dec 28 '18 at 18:04













  • Thank you for the help I see what i forgot.

    – kiki fer
    Dec 28 '18 at 18:08











  • The title given to your question is unlikely to be useful for anybody searching for answers about a similar problem. The question not abot injectivity of a list, but about how to convert for loops to while loops. This already has answers on SO, e.g. here.

    – Adrian W
    Dec 28 '18 at 18:12








1




1





put k+=1 inside while k<len(L) loop and i+=1 in outer while loop

– prashant rana
Dec 28 '18 at 18:04





put k+=1 inside while k<len(L) loop and i+=1 in outer while loop

– prashant rana
Dec 28 '18 at 18:04













L is x or something else?

– Anto Jurković
Dec 28 '18 at 18:04





L is x or something else?

– Anto Jurković
Dec 28 '18 at 18:04













converting a for loop to a while loop would be an easier approach if you have that working. anyways, your innermost loop is never modifying the value of k so the condition never becomes false. as a tip, if you can do it in a for loop, make sure you convert each for loop to a while loop by resetting and incrementing at the right levels.

– Paritosh Singh
Dec 28 '18 at 18:04







converting a for loop to a while loop would be an easier approach if you have that working. anyways, your innermost loop is never modifying the value of k so the condition never becomes false. as a tip, if you can do it in a for loop, make sure you convert each for loop to a while loop by resetting and incrementing at the right levels.

– Paritosh Singh
Dec 28 '18 at 18:04















Thank you for the help I see what i forgot.

– kiki fer
Dec 28 '18 at 18:08





Thank you for the help I see what i forgot.

– kiki fer
Dec 28 '18 at 18:08













The title given to your question is unlikely to be useful for anybody searching for answers about a similar problem. The question not abot injectivity of a list, but about how to convert for loops to while loops. This already has answers on SO, e.g. here.

– Adrian W
Dec 28 '18 at 18:12





The title given to your question is unlikely to be useful for anybody searching for answers about a similar problem. The question not abot injectivity of a list, but about how to convert for loops to while loops. This already has answers on SO, e.g. here.

– Adrian W
Dec 28 '18 at 18:12












1 Answer
1






active

oldest

votes


















1














It is because the value of k in the inner loop is not changing, I think you are missing k+=1 somewhere.



Code



def injective(x):  
i=0
k=i+1
while i<len(L)-1 : #L is the name of the list
while k<len(L) :
if L[i]==L[k] :
return False
k+=1
i+=1
return True


I have taken the liberty to optimize the code a bit (it will decrease your iterations drastically for a non-injective function). You can use the same in your other program with the for loop.






share|improve this answer





















  • 1





    This is similar to what I have for my for loop, thank you for the help

    – kiki fer
    Dec 28 '18 at 18:13











  • One more thing, I am not sure why you need 'len(L)-1' in the outer loop, I think you will need to check the last element also. (not sure though)

    – javan.rajpopat
    Dec 28 '18 at 18:15











  • Isn't the last element checked with the first iteration ?

    – kiki fer
    Dec 28 '18 at 18:19


















1 Answer
1






active

oldest

votes








1 Answer
1






active

oldest

votes









active

oldest

votes






active

oldest

votes









1














It is because the value of k in the inner loop is not changing, I think you are missing k+=1 somewhere.



Code



def injective(x):  
i=0
k=i+1
while i<len(L)-1 : #L is the name of the list
while k<len(L) :
if L[i]==L[k] :
return False
k+=1
i+=1
return True


I have taken the liberty to optimize the code a bit (it will decrease your iterations drastically for a non-injective function). You can use the same in your other program with the for loop.






share|improve this answer





















  • 1





    This is similar to what I have for my for loop, thank you for the help

    – kiki fer
    Dec 28 '18 at 18:13











  • One more thing, I am not sure why you need 'len(L)-1' in the outer loop, I think you will need to check the last element also. (not sure though)

    – javan.rajpopat
    Dec 28 '18 at 18:15











  • Isn't the last element checked with the first iteration ?

    – kiki fer
    Dec 28 '18 at 18:19
















1














It is because the value of k in the inner loop is not changing, I think you are missing k+=1 somewhere.



Code



def injective(x):  
i=0
k=i+1
while i<len(L)-1 : #L is the name of the list
while k<len(L) :
if L[i]==L[k] :
return False
k+=1
i+=1
return True


I have taken the liberty to optimize the code a bit (it will decrease your iterations drastically for a non-injective function). You can use the same in your other program with the for loop.






share|improve this answer





















  • 1





    This is similar to what I have for my for loop, thank you for the help

    – kiki fer
    Dec 28 '18 at 18:13











  • One more thing, I am not sure why you need 'len(L)-1' in the outer loop, I think you will need to check the last element also. (not sure though)

    – javan.rajpopat
    Dec 28 '18 at 18:15











  • Isn't the last element checked with the first iteration ?

    – kiki fer
    Dec 28 '18 at 18:19














1












1








1







It is because the value of k in the inner loop is not changing, I think you are missing k+=1 somewhere.



Code



def injective(x):  
i=0
k=i+1
while i<len(L)-1 : #L is the name of the list
while k<len(L) :
if L[i]==L[k] :
return False
k+=1
i+=1
return True


I have taken the liberty to optimize the code a bit (it will decrease your iterations drastically for a non-injective function). You can use the same in your other program with the for loop.






share|improve this answer















It is because the value of k in the inner loop is not changing, I think you are missing k+=1 somewhere.



Code



def injective(x):  
i=0
k=i+1
while i<len(L)-1 : #L is the name of the list
while k<len(L) :
if L[i]==L[k] :
return False
k+=1
i+=1
return True


I have taken the liberty to optimize the code a bit (it will decrease your iterations drastically for a non-injective function). You can use the same in your other program with the for loop.







share|improve this answer














share|improve this answer



share|improve this answer








edited Dec 28 '18 at 18:12

























answered Dec 28 '18 at 18:04









javan.rajpopatjavan.rajpopat

1514




1514








  • 1





    This is similar to what I have for my for loop, thank you for the help

    – kiki fer
    Dec 28 '18 at 18:13











  • One more thing, I am not sure why you need 'len(L)-1' in the outer loop, I think you will need to check the last element also. (not sure though)

    – javan.rajpopat
    Dec 28 '18 at 18:15











  • Isn't the last element checked with the first iteration ?

    – kiki fer
    Dec 28 '18 at 18:19














  • 1





    This is similar to what I have for my for loop, thank you for the help

    – kiki fer
    Dec 28 '18 at 18:13











  • One more thing, I am not sure why you need 'len(L)-1' in the outer loop, I think you will need to check the last element also. (not sure though)

    – javan.rajpopat
    Dec 28 '18 at 18:15











  • Isn't the last element checked with the first iteration ?

    – kiki fer
    Dec 28 '18 at 18:19








1




1





This is similar to what I have for my for loop, thank you for the help

– kiki fer
Dec 28 '18 at 18:13





This is similar to what I have for my for loop, thank you for the help

– kiki fer
Dec 28 '18 at 18:13













One more thing, I am not sure why you need 'len(L)-1' in the outer loop, I think you will need to check the last element also. (not sure though)

– javan.rajpopat
Dec 28 '18 at 18:15





One more thing, I am not sure why you need 'len(L)-1' in the outer loop, I think you will need to check the last element also. (not sure though)

– javan.rajpopat
Dec 28 '18 at 18:15













Isn't the last element checked with the first iteration ?

– kiki fer
Dec 28 '18 at 18:19





Isn't the last element checked with the first iteration ?

– kiki fer
Dec 28 '18 at 18:19



Popular posts from this blog

Monofisismo

Angular Downloading a file using contenturl with Basic Authentication

Olmecas