Q:

How to substring a string without using slice and print function?

make_substring(chars: str, start: int, stop: int, step: int)-> str

Want a method which returns a substring of the given string that begins at the start index (inclusive) and ends at the stop index (exclusive), increasing step characters each iteration. Assume start and stop are non-negative and step is positive. Also using for loop.
def make_substring(chars: str, start: int, stop: int, step: int) -> str:
    c = chars
    s = ""
    if start + step < stop:
       for i in range(start, stop, step):
           s = c[start] + c[start + step]
       return s

# using test case:
make_substring("ABCD", 0, 3, 2) == "AC"

A:

This line:
s = c[start] + c[start + step]

keeps setting s to the same two characters, since start and start + step don't change in the loop. It doesn't accumulate characters, and it doesn't process the characters at index i.
That line should be:
s += c[i]

Using += makes it append to the string, and c[i] is the current character from the range.
Also, get rid of the if statement. Even if start + step > stop, you should still include the character at start in the result.
def make_substring(chars: str, start: int, stop: int, step: int) -> str:
    s = ""
    for i in range(start, stop, step):
        if i >= len(chars):
            break // stop when we run out of characters
        s += chars[i]
    return s

There's no need for the c variable, you can simply use the chars parameter.

