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:
The counting of the letters isn't correct. You should just output the length of
word_array
.You're iterating the
while
loop too many times. You should terminate it whenm
equals or exceedslen(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