Home > Enterprise >  No Iteration in nested while Statement
No Iteration in nested while Statement

Time:05-18

How the loop should iterate. I'm a beginner trying to create a Python program to print a word backwards based on old knowledge from a few years ago. It does a few other things but they are just printed statements are don't pose a problem. Here is my code:

count = 0
while count < 100:
    word_var = input("Enter ONE word with NO spaces:")
    def split(word_var):
        return list(word_var)
    word_array = split(word_var)
    m = 0
    i = len(word_array)-1-m
    print("The number of letters in your word is:", i)
    while m < len(word_array):
        if m < i:
            word_array[m], word_array[i - m] = word_array[i - m], word_array[m]
            m = m   1
        else:
            break
    m = m   1

    print(''.join(word_array))
    count = count   1
    print("You've typed:",count,"word(s).")

Here is the problem section:

        if m < i:
            word_array[m], word_array[i - m] = word_array[i - m], word_array[m]
            m = m   1
        else:
            break
     m = m   1 

My main problem is that it seems like the second while loop is not iterating when the word is more than five letters long. For example, if I input the word "should" into the program I get back out dhouls. It seems as if only one interchange of letters is being performed. I figure this is a problem with the if statement in that nested while loop but I can't seem to find what is wrong with it. I carefully sketched out how I think the if statement works in the photo attached.

CodePudding user response:

Your if condition is wrong. You want to compare the two indices that you will use in the list, but the second one is not i, but i-m. So change it to:

if m < i - m:

This corrects your issue. It should be noted that in Python you can reverse string just like this:

print(word_var[::-1])

CodePudding user response:

There are two issues:

  1. The counting of the letters isn't correct. You should just output the length of word_array.

  2. You're iterating the while loop too many times. You should terminate it when m equals or exceeds len(word_array) // 2. Otherwise, you'll unreverse the letters and get the original word back.

i = len(word_array)-1
print("The number of letters in your word is:", len(word_array))
while m < len(word_array) // 2:
    word_array[m], word_array[i - m] = word_array[i - m], word_array[m]
    m = m   1

This outputs:

Enter ONE word with NO spaces:should
The number of letters in your word is: 6
dluohs
You've typed: 1 word(s).

CodePudding user response:

I like your project and appreciate your efforts. This a another way to reverse a string using a list variable and the insert() method. word_array = []

word_var = input('Your word : ')
word_array = []

for c in word_var:
    word_array.insert(0, c)

word_reversed = ''.join(word_array)
print(word_var, '->', word_reversed)

output :

should -> dluohs
  • Related