Practice: is, and when Thai says nothing
What you will be able to do
Turn any English sentence containing "is" into Thai by choosing between เป็น, คือ, อยู่, มี and no verb at all, and negate each of them the way Thai does rather than the way English does.
เป็น puts the subject into a class and must have a noun after it; คือ is an equals sign between two specific things; อยู่ places something, or marks an action still running; มี introduces something new into the conversation; and a quality word such as สวย or แพง is already a verb meaning "is beautiful" or "is expensive", so it takes no "is" in front of it at all.
Which sentence?
You want to warn a friend that the food at this place costs a lot.
แพง (phaeng) is not an adjective in the English sense; it is a verb that already means "is expensive", so อาหารแพง is a complete sentence with nothing missing from it. Putting เป็น in front produces something close to "the food is is expensive". คือ is an equals sign between two specific things, and "expensive" is a quality, not a thing that the food could equal.
เป็น was wrong in เขาสวย. Why is it right here?
เขาเป็นคนสวย
The whole condition for เป็น is that a noun comes after it, and คน (khon) is a noun, so "she is a beautiful person" takes เป็น while "she is beautiful" cannot have it. Politeness plays no part, and adding a particle would change nothing about the structure. It is an ordinary sentence you can build yourself, not a frozen phrase like ไม่เป็นไร. And the sex of the subject never touches this rule.
Which sentence?
Your new landlord asks what you do for a living. You teach.
A job is a class you belong to, one teacher among many, and that is the subject + เป็น + noun shape exactly: ผมเป็นครูครับ (phǒm bpen khruu khráp). คือ equates two specific things and would be reaching for "the teacher", the identified one, not "a teacher". Dropping the verb altogether works only in front of a quality word, and ครู is a noun.
Which negative do you build the correction on?
A tuk-tuk driver has taken you for a tourist and you want to put him right.
An identity is negated with ไม่ใช่ (mâi châi), the standing negative for "is not" in front of a noun and the negative half of ใช่: ผมไม่ใช่นักท่องเที่ยวครับ ผมอยู่ที่นี่. ไม่เป็น is not what a Thai speaker reaches for to deny a job, a nationality or a relationship; it belongs to the other jobs เป็น does, as in ว่ายน้ำไม่เป็น. ไม่อยู่ says you are not present. ไม่มี says a thing does not exist or is not in stock.
Which sentence?
A customer asks where the toilet is. It is round the back of the shop.
Place always takes อยู่ (yùu), put directly in front of the location: ห้องน้ำอยู่ข้างนอกครับ. เป็น needs a noun naming a class after it, and ข้างนอก names a position rather than a kind of thing. คือ equates two specific things, and a toilet does not equal an outside. ใช่ only asks and answers — you do not build statements with it, which is why ผมใช่ครู is not Thai — so ห้องน้ำใช่ข้างนอก is not a sentence anyone can say.
Which question?
You have just moved into the street and you do not know whether there is a chemist anywhere nearby.
Nothing has been mentioned yet, so the chemist is new to the conversation, and a new thing entering the conversation is มี (mii): แถวนี้มีร้านขายยาไหมครับ, with มีครับ or ไม่มีครับ coming back. อยู่ is for a shop you both already know about, waiting to be located, as in ร้านขายยาอยู่ตรงข้ามโรงพยาบาล. เป็น would ask whether this street is itself a chemist, and คือ would ask whether it equals one.
What have you been told?
คุณหมอไม่อยู่ครับ
อยู่ with no place named after it means present, in, available, and it negates with a plain ไม่, so this is the standard counter reply and it covers everything from out for lunch to away until Monday. The sentence to have ready after it is กลับมากี่โมงครับ (glàp maa gìi moong khráp). A doctor who was unwell would be described with เป็น, the verb for illness. A clinic with no doctor on its books would be ไม่มี. And the wrong doctor would be ไม่ใช่.
Which sentence?
Someone asks who the manager here is. It is Khun Somchai.
Both halves name one specific person and could be swapped round without changing the meaning, which is the equals sign, คือ (kheu). This is one of the few places where the two do not overlap: เป็น in front of a personal name sounds wrong to Thai ears, because เป็น sorts the subject into a class and a name is not a class. อยู่ answers where someone is, not who they are.
What is being asked?
คุณเป็นอะไรครับ
เป็น is the verb for having an illness — เป็นหวัด (bpen wàt), เป็นไข้ (bpen khâi) — so เป็นอะไร asks what state you are in, not what you are, and at a clinic you will usually hear it with มา on the end, เป็นอะไรมาครับ. A job is asked with ทำงานอะไร. Neither ownership nor what you are carrying is in this sentence anywhere; the nearest relative of this question is เป็นยังไงบ้าง, which asks the same thing of a situation rather than a person.
What do you say?
You have just tripped over a step outside a shop and the whole row has turned to look. You are unhurt.
This is one of the jobs where ไม่ does sit straight in front of เป็น: ผมไม่เป็นอะไรครับ (phǒm mâi bpen à-rai khráp), nothing is wrong with me, and it is the direct answer to เป็นอะไร. ไม่ใช่ negates an identity, so it would be denying that you are a something. ไม่มี says you have not got any, which is what you say about change or a bag rather than about your condition.
A Thai speaker would not ask it this way. Which fixes it?
คุณเป็นครูไหมครับ
ไหม questions a verb, which is why แพงไหม works, but an identity sentence is tagged instead: คุณเป็นครูใช่ไหมครับ when you already half expect yes, or คุณเป็นครูหรือเปล่าครับ when you have no idea. The answers are ใช่ครับ and ไม่ใช่ครับ. Swapping in คือ leaves the same bad ไหม hanging on the end. Dropping เป็น takes away the verb the sentence needs. And มาก strengthens a quality word, which ครู is not.
What does this say about him?
เขายังโกรธอยู่
ยัง … อยู่ wraps the verb and gives "still", and โกรธ (gròot) is a verb in Thai even though English calls it an adjective, which is exactly why it can take อยู่ the way an action verb does. There is no Thai word here for the English "is" at all. Past anger would need a time word or เคย. "As well" would need ด้วย (dûay), which is not in the sentence. And nothing here points forwards to anger that has not started.
Which sentence?
You taught in England years ago and you do something else now. You do not want to be taken for a teacher today.
Thai marks no tense, so ผมเป็นครูที่อังกฤษ will simply be taken as what you do now, and เคย (khoei) is the word that turns a present statement into a former one: ผมเคยเป็นครูที่อังกฤษ. ไม่ได้เป็น corrects a role someone assumes you hold now — ผมไม่ได้เป็นหมอครับ, "I am not actually a doctor" — so ผมไม่ได้เป็นครูที่อังกฤษ denies the English job flat and leaves the years you did teach unsaid. ผมอยู่ที่อังกฤษ says you live in England, a different sentence about a different thing.
Which sentence?
Someone at a party asks your name. You are called John.
ชื่อ (chêu) is a verb in its own right meaning "to be named", so it carries the sentence by itself and no word for "is" is needed: ผมชื่อจอห์นครับ, and the question back is คุณชื่ออะไรครับ. ชื่อของผมคือ is the English sentence wearing Thai words and nobody says it. เป็น needs a noun naming a class after it, and a personal name is one specific person, which is the place where เป็น sounds wrong to Thai ears.
Common mistake
Putting เป็น in front of a quality word, which is the single clearest sign of translating from English, and negating an identity with ไม่เป็น when Thai uses ไม่ใช่.