<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: Hello. I need help with my code.
	<alt>I need help with this code. It's throwing a `KeyError`. I'm not sure why.
Assistant: Can you describe the issue you are experiencing?
	<alt>Can you walk me through what your code does line by line when `menu_choice` is `"a"`?
	<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"`?
User: I am getting a `KeyError: 4`. Not really sure why.
	<alt>My terminal is printing `KeyError: 4`. I think it's failing a test case perhaps.
Assistant: 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?
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.
Assistant: 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: Ah found it. In the example cases, line 18 is trying to access the value using the key 4 `passwords_dict[4] == "newpass"`. However, `passwords_dict` is initialized to `passwords_dict = {1: "abc123", 2: "qwerty", 3: "password"}` and does not have 4 as a key.
	<alt>Ah found it. In the example cases, this line is trying to access the value using the key 4 `passwords_dict[4] == "newpass"` after calling `validate_or_add_password("a", "newpass", passwords_dict)` in an attempt to add "newpass" as a password.
Assistant: Good. What is the statement right before line 18 attempting to do?
User: Oh! I get it now! This example case is testing whether my function adds `"newpass"` to `passwords_dict`. I don't think I do that. I thought I just need to print "Password added!". Let me edit my code to ensure that it adds `password` to `passwords_dict` in this case.
<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. Does your code pass all the example cases?
User: Yes it does thank you for your help. I learned more about `KeyError`s today.
Assistant: You're welcome to let me know if I can be of any further assistance.
</dialogue>