3

I am a beginner in Python trying to make a function that will capitalize all of the values with an even index, and make lowercase all of the values with an odd index.

I have been struggling repeatedly with for loops only giving me the first value. I have also tried with while loops. However I am curious if there is a way to make it work with for loops (do I need a '+=1' somewhere?)

def func1(x):
    for (a,b) in enumerate (x):
         if a%2 == 0:
              return b.upper()
         else:
              return b.lower()


func1('Testing Testing')

>>>'T'
Mad Physicist
  • 107,652
  • 25
  • 181
  • 264
hhillman231
  • 125
  • 1
  • 2
  • 9

5 Answers5

7

Functions end as soon as a return is reached. You'll need to return once at the end instead of inside the loop:

def func1(x):
  # The string to work on
  new_str = ""

  for (a,b) in enumerate (x):
    # Add to the new string instead of returning immediately
    if a%2 == 0:
      new_str += b.upper()
    else:
      new_str += b.lower()

  # Then return the complete string
  return new_str
Carcigenicate
  • 43,494
  • 9
  • 68
  • 117
0

You are returning after first iteration.

Try the following:

def func1(x):
    result = ''
    for (a,b) in enumerate (x):
         if a%2 == 0:
              result += b.upper()
         else:
              result += b.lower()
    return result
zipa
  • 27,316
  • 6
  • 40
  • 58
0

You are returning in the first iteration of the loop.

Append the alphabets in a list and return concatinated. Also add 1 to a while checking condition if you want even index to capitalize as the index starts from 0. Use below example:

    def func1(x):
        result = []
        for (a,b) in enumerate (x):
            if (a+1)%2 == 0:
                result.append(b.upper())
            else:
                result.append(b.lower())
        return "".join(result)


    print func1('Testing Testing')

Output:

    tEsTiNg tEsTiNg
Chandella07
  • 2,089
  • 14
  • 22
0

You can also use a generator, although it is a bit more advanced.

def fun1(x):
    for (a,b) in enumerate (x):
        if a%2 == 0:
            yield b.upper()
        else:
            yield b.lower()

def func1(x):
    return [i for i in fun1(x)]


func1('Testing Testing')
PythonPikachu8
  • 359
  • 2
  • 11
-2

You are returning from the function early. you need to collect the data you want to return in a variable.

def func1(x):
returnMe = {}
    for (a,b) in enumerate (x):
         if a%2 == 0:
              returnMe += b.upper()
         else:
              returnMe += b.lower()
return returnMe


func1('Testing Testing')

>>>'T'
Gladaed
  • 211
  • 1
  • 8