30

Is there another simpler way to write code that basically checks every character of the string 'abcde'

if input == 'a' or input == 'ab' or input == 'abc' or input == 'abcd' or input == 'abcde':
    return True
3
  • Can they be multiple combinations of "abcde" ? Like input=='de' ? Commented May 18, 2020 at 3:01
  • 1
    Related: Comparing a string to multiple items in Python Commented May 18, 2020 at 14:03
  • 2
    Please don't use input as your variable names. Commented May 19, 2020 at 19:37

5 Answers 5

36

This should do the same thing as what you put.

return 'abcde'.startswith(input)
Sign up to request clarification or add additional context in comments.

2 Comments

From the description, it's not clear what the result for the empty string should be, "abcde".startswith("") == True, which doesn't quite match the example code
Yeah, if you want to not include empty strings, I think the best thing would be adding an and input.
12

Don't name variables input, since it will shadow the builtin function input(). Its considered bad practice to do this, and easy enough to just choose another variable name.

You could use a set to check if the input matches any of the substrings:

lookups = {'a', 'ab', 'abc', 'abcd', 'abcde'}

my_input = input()

if my_input in lookups:
    return True

We could also generate this set using a set comprehension:

characters = 'abcde'

lookups = {characters[:i] for i in range(1, len(characters) + 1)}

my_input = input()

if my_input in lookups:
    return True

For large sets of combinations, the benefit of using a set over a list is that you get constant time O(1) lookups for searching. This is much better than using a list, which will give you linear O(N) lookups.

Comments

6

There are multiple cute ways to do it. startwith is probably the most efficient one, but these should work too:

using lstrip:

return 'abcde'.lstrip(input)!='abcde'

using list comprehension:

return any(['abcde'[:i+1] == input for i in range(len('abcde'))])

using regex:

   pattern = re.compile('^'+input)
   return bool(pattern.match('abcde'))

or just:

  return 'abcde'[:len(input)]==input

1 Comment

What is not not pattern.match(...)? If you did it just to convert match to a bool you could use bool directly: bool(pattern.match(...))
4

You could probably try something like this:

def your_function():
    # Add as much chars that you want here
    chars = "abcde"

    # Assuming you are taking the user input from terminal
    user_input = input()

    # Loop over every substring from chars
    for i in range(len(chars) + 1):
        if chars[:i] == user_input:
            return True

    return False

Let me know if this helps!

Comments

0

You can try this:

If input in ['a', 'ab', 'abc', 'abcd', 'abcde']:
    return True
else:
   return False

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.