Python exercise 7: Determine a string is a mixture of something
Tags: beginners, python, codenewbie
Published: 2022-06-08 09:48:00

## Question
- Find words contain both alphabets and numbers from an input string.
- Given
```
str1 = "Emma25 is Data scientist50 and AI Expert"
```

- **Expected Output**:
```
Emma25  
scientist50
```
### Hint
Use the built-in function `any()` with the combination of string method `isalpha()` and `isdigit()`

## Syntax of any() function
```python
any( iterable)
```
- Return `True` if any element of the _iterable_ is true. 
- If the iterable is empty, return `False`. 

## My attempt
I can think use string.split() method first, and check each word in the with isalpha and isdigit method, but do not know how to combine them.

### My Decomposition of the question
- The output need to be an string composed of number  and alphabet
- The first step is to separate the str1 into different string
	- use split() method, this will return a list
- check each string whether it is a mixture of digit and alphabet
	- if a string is mixture of digit and alphabet, isalpha() and isdigit() will both return True
- if the part fulfil the requirement, output it

## Recommend solution

```python
str1 = "Emma25 is Data scientist50 and AI Expert"  
  
new_list = []  
# split string by whitespace  
temp_list = str1.split()  
# Check each string whether is a mixture of alphabet and digits  
for string in temp_list:  
    # If a string in a mixture of alphabet and digits, when checking each character in that string,  
    # isdigit and isalpha will return True at least one time,
    if any(char.isalpha() for char in string) and any(char.isdigit() for char in string):  
        # add the mixture string to a list  
        new_list.append(string)  
  
print("Displaying words with alphabets and numbers")  
# print out the result  
for string in new_list:  
    print(string)
```
### Algorithm of the solution
1. initiate a new_list
2. Separate the original list and store in the temp_list
3. Check each string whether is a mixture of alphabet and digits
	- 3.1 If the string is a mixture of alphabet and digits, isdigit() and isalpha() both will return True at least one time
		- 3.1.1 check whether the string contain alpha
			- Use list comprehension to  iterate over each character on the string, and check with isalpha() and output will present as an iterator
				- Call any() function on the iterator, a True should return
		- 3.1.2 Check whether a the string contain digit
			- Use list comprehension to iterate over each character on the string, and check with isdigit() and output will present as an iterator
				- Call any() function on the iterator, a True should return
		- 3.1.3 If both 3.1.1 and 3.1.2 are True, store the string to the new_list
4. Print out the result
	- 4.1 Iterate over the new_list and print out each string

## My reflection
I though I am close to solve this question, maybe don't give up too soon next time. Glad I learn a new function any() and how to use it.

## Credit
- Exercise on [PYnative](https://pynative.com/python-string-exercise/) 
- [Python doc](https://docs.python.org/3/library/functions.html#any) (Accessed at 2022 JUN 07)