<problem>
Create a function `validate_or_add_password(menu_choice:str, password:str, passwords_dict:Dict[str,any]) -> str` that validates or adds a password. This function takes three parameters:
* `menu_choice (str)`: either 'v' for validate or 'a' for add password
* `password (str)`: the password to be validated or added
* `passwords_dict (Dict[str,any])`: a dictionary containing the passwords

The function returns a string "Welcome!" if the password is found in the dictionary and menu_choice is 'v'. If the password is not found in the dictionary, the function returns "I don't know you.". If menu_choice is 'a', the function adds the password to the dictionary and returns "Password added!". If the password is already in the dictionary, the function returns "Password already exists!".
## Example Cases:
```
passwords_dict = {1: "abc123", 2: "qwerty", 3: "password"}
validate_or_add_password("v", "abc123", passwords_dict) => "Welcome!"
validate_or_add_password("v", "xyz789", passwords_dict) => "I don't know you."
validate_or_add_password("a", "abc123", passwords_dict) => "Password already exists!"
validate_or_add_password("a", "newpass", passwords_dict) => "Password added!"
passwords_dict[4] => "newpass"
validate_or_add_password("a", "newpass", passwords_dict) => "Password already exists!"
```
</problem>
<bug_code>
1. def validate_or_add_password(menu_choice, password, passwords_dict):
2.    if menu_choice == "v":
3.        if password in passwords_dict.values():
4.            return "Welcome!"
5.        else:
6.            return "I don't know you."
7.    elif menu_choice == "a":
8.        if password in passwords_dict.values():
9.            return "Password already exists!"
10.        else:
11.            return "Password added!"
</bug_code>
<bug_desc>
The function does not add `password` to `passwords_dict` as specified in the instructions.
</bug_desc>
<bug_fixes>
After line 10 insert the following inside the `else` scope: `passwords_dict[len(passwords_dict) + 1] = password`
</bug_fixes>
<unit_tests>
passwords_dict = {1: "abc123", 2: "qwerty", 3: "password"}
assert validate_or_add_password("v", "abc123", passwords_dict) == "Welcome!"
assert validate_or_add_password("v", "xyz789", passwords_dict) == "I don't know you."
assert validate_or_add_password("a", "abc123", passwords_dict) == "Password already exists!"
assert validate_or_add_password("a", "newpass", passwords_dict) == "Password added!"
assert passwords_dict[4] == "newpass"
assert validate_or_add_password("a", "newpass", passwords_dict) == "Password already exists!"
</unit_tests>
<stu_desc>

</stu_desc>
<dialogue>
User: I need help with this code. It's throwing a `KeyError`. I'm not sure why.
	<alt>Hello. I need help with my code.
Assistant: Let's look through the Python documentation together. What does the error `KeyError: 4` mean and why does it occur?
	<alt>Let's go through the problem description together. What is the function `validate_or_add_password` supposed to do when `menu_choice` is `"a"`?
	<alt>Let's look through the Python documentation together. What does the error `KeyError: 4` mean and why does it occur?
	<alt>What does `KeyError` typically mean and why does it occur?
	<alt>Let's look at the example cases, where do you see `4` being used as a key?
	<alt>Let's try to reproduce this error. Open the Python terminal and run, `d  = {'a': 1}` then, run `print(d['b'])`. What do you observe?
	<alt>Let's look at your error again. What line is throwing the `KeyError`?
	<alt>Which parameter in the `validate_or_add_password` function is a data structure that uses keys?
	<alt>Can you walk me through what your code does line by line when `menu_choice` is `"a"`?
User: After looking into the Python documentation, the `KeyError` seems to be caused by trying to access a dictionary using a key that does not exist. I wonder if this relates to adding a new password.
Assistant: Good hypothesis. Can you walk me through what your code does line by line when `menu_choice` is `"a"`?
	<alt>Good. Let's look through the example cases together. What do you think might be causing the `KeyError`?
	<alt>Good. Which test case do you think is causing the `KeyError`?
	<alt>Let's look at your error again. What line is throwing the `KeyError`?
User: Certainly. So when `menu_choice` is `"a"` we go to line 8, we check if  `password` is already stored in `passwords_dict`. If so, the function returns "Password already exists!" otherwise it returns "Password added!".
Assistant: Good. Let's go through the problem description together. What is the function `validate_or_add_password` supposed to do when `menu_choice` is `"a"`?
	<alt>According to the problem description, what do you need to do with `password` if `menu_choice` is `"a"`?
User: Oh. It is supposed to add `password` to `passwords_dict` and then return "Password added!". Let me edit my code.
<code>
1. def validate_or_add_password(menu_choice, password, passwords_dict):
2.    if menu_choice == "v":
3.        if password in passwords_dict.values():
4.            return "Welcome!"
5.        else:
6.            return "I don't know you."
7.    elif menu_choice == "a":
8.        if password in passwords_dict.values():
9.            return "Password already exists!"
10.        else:
11.            passwords_dict[len(passwords_dict) + 1] = password
12.            return "Password added!"

</code>
Assistant: Good. Have you tried your code on all the example cases?
User: Yes. It works correctly! Thank you for helping me today!
Assistant: You're welcome. Let me know if I can be of any further assistance in the future.
</dialogue>