Sometimes, a script needs to check a string for an exact match. If it's not an exact match, the program won't continue! Password protection is an example of this.
Other times, a script might need to ignore strings that don't contain a certain substring. For example, a radio-broadcasting micro:bit might send names with different ID strings and commands. Each micro:bit can be running a script that looks for its own ID string and only take action if it detects it in the string.
# comp_find_check_intro from microbit import * sleep(1000) password = "shrubbery" while True: s = input("Enter password: ") if(s == password): break else: print("Password incorrect.") print("You are now in the") print("password protected") print("part of the script.")
A string variable named password is declared as "shrubbery".
password = "shrubbery"
Inside a while True loop, the first step is to prompt the user (that's you) for a password. The result you type is stored in the variable s.
while True: s = input("Enter password: ")
Next, an if...else... statement checks if the input you typed, which is stored in s, matches the password variable. The if... statement uses the equal to == operator, which returns True if the two strings match, or False if they don't. When the two strings do match, the break statement "breaks out of" the while True loop and moves on to the password-protected part of the script. When it doesn't match, the script just displays "Password incorrect." After that, the while True loop repeats.
if(s == password): break else: print("Password incorrect.")
The script only reaches this point if the user typed the correct password..
print("You are now in the") print("password protected") print("part of the script.")
Sometimes it's wise to check if a string contains a certain phrase. For example, a micro:bit might be sending radio commands to more than one cyber:bot robot. A unique name could be used to select which cyber:bot in the group should execute the command.
The string.find() method can help with this. It returns the index of the first character in the matching substring. If it returns 0, it means it found the character at the very beginning of the string. If it returns 5, it means it started at the fifth character in the string. If it doesn't find a match, it returns -1.
Here are some examples of how string.find() can be used:
Keep in mind, you can also search for characters. Just use a single character in the search, like s.find("A").
As mentioned in the Strings and Characters page, string objects also have useful methods. Here are a few examples to try:
new_string = string.replace("substring", "replacemnt_string") lower_case = string.lower() upper_case = string.upper() new_list = string.split()
Here we have three examples of searching for substrings with string.find(). After finding the index of the first and second instances of one substring, it looks for a substring that isn't there. Examine the searches and results carefully.
# comp_find_check_try_this from microbit import * sleep(1000) s = "Arthur: It is 'Arthur', King of the Britons." n1 = s.find("Arthur") n2 = s.find("Arthur", 7, len(s)) n3 = s.find("Lancelot") print("Results of string.find():") print("n1 = ", n1, ", n2 =", n2, ", n3 = ", n3)
Does this make sense? The first instance of "Arthur" starts at character 0 in s. The second starts at 15. Since Lancelot isn't in there, it returns -1.
Sometimes a script has to make the distinction between an exact match and the presence or absence of a term in a string. Even if string.find() returns 0, that doesn't prove that there aren't more characters following the match. One way to solve this is to use the is equal to == operator to check if the string is an exact match. If it isn't, then use the string.find() method to check if the substring is anywhere in the string.
# comp_find_check_your_turn from microbit import * sleep(1000) while True: s = input("Type run: ") n = s.find("run") if(s == "run"): print("Good, you typed run.") elif(n != -1): print("It contains run.") print("r is the", n, "th character.") else: print("You didn't type run.")