先给结论:判断这道题用哪种时态,只看两个问题——① 句中有没有明确的过去时间词(yesterday、last year、in 2010、when she was young)?有,就选一般过去时。② 动作的结果或状态是不是一直延续到现在?是,就选现在完成时(have/has + 过去分词)。中文靠「去年去了」「已经吃了」这类时间词和「了/过」来补足信息,而英语把这两种信息全部压进动词形态里,这正是选择题的考点。
下面的 30 道题按「基础 · 初中水平 → 进阶 · 高中水平 → 挑战 · 大学·四六级」分为三组,每道题点击选项后立即批改,并给出中文解析:不只告诉你正确答案,还会指出中文母语者在这里最容易踩的坑——比如「我昨天吃了饭」的「了」会诱使你误选现在完成时。
现在完成时 vs 一般过去时:30 题小测
规则速览:三步锁定时态
做选择题时按固定顺序问自己三个问题,90% 的题可以直接出答案:第一步,找过去时间词(yesterday、last week、in 2010、when I was a child)——只要出现,直接选一般过去时,这步优先级最高。第二步,没有时间词时,看动作是否延续到现在或结果是否影响现在(since、for、so far、already、yet、just)——是,就选现在完成时。第三步,仍然拿不准时,想中文句子强调什么:讲「这件事发生在过去某刻」用过去式,讲「这件事和现在有关」用完成时。
常见陷阱:四个最容易丢分的句型
以下四个句型在考试和日常写作中出现频率最高,也是中文母语者错误率最集中的地方。做完上面的练习后,可以回来看看这四条是否都答对了。
为什么中文母语者总在这里出错:「了/过」不是时态
根本原因在于:中文的「了」和「过」是体标记(aspect markers),不是时态。「了」表示动作的完成或状态的变化(「吃了」「天黑了」),「过」表示经历(「去过」「见过」),它们都不锁定时间——「我吃了饭」可以是刚才吃的,也可以是明晚到了东京「我(再)吃了饭再说」。而英语的现在完成时是一个真正的「时态」:它要求动作发生在过去、且与现在时刻相连。也就是说,中文母语者的语感里根本没有「过去与现在相连」这个需要动词变形的维度。
这解释了两个方向的错误。第一个方向:中文「了」太勤快,「去年去了日本」「昨天吃了饭」里都有「了」,于是很多学习者把「有『了』= 现在完成时」当成规律,写出 I have seen him yesterday 这样的句子。第二个方向:反过来把「了」当成一般过去时的信号,导致 I lost my phone(现在还找不着)该用 have lost 的地方也用过去式。正确的做法是彻底放弃从「了/过」出发倒推时态,改为直接问英语的两个问题:有没有过去时间词?是否连接现在?
如何有效练习:让判断快过母语直觉
时态选择是一种「速度游戏」:考试和口语中你没有时间慢慢分析,必须让三步判断法快过中文「了/过」的本能反应。建议每天完整做一遍上面的 30 题,连续做一周——同一批题重复做并不浪费,目标是把正确答案的反应时间压缩到两秒以内。做完后把错题的中文句子抄下来,在旁边用英语重写一遍并标注判断依据。
更有效的做法是把练习搬进自己的写作:把邮件、作文或日记贴进 PromGee 的免费语法检查工具,它会标出每一个时态选择问题并用中文解释对应的规则——你写错的句子,就是你最需要的那套练习题。
继续练习
常见问题
现在完成时和一般过去时到底怎么区分?
看两件事:句中有明确的过去时间词(yesterday、last year、in 2010)就用一般过去时;动作或状态延续到现在、或强调对现在的影响(since、for、already、yet、just)就用现在完成时。中文的「了/过」是体标记不是时态,不能作为判断依据。
yesterday 能和现在完成时连用吗?
不能。yesterday、ago、last week、in 2010 这类明确的过去时间词只与一般过去时连用:I saw him yesterday,而不是 I have seen him yesterday。这是中文母语者最常见、扣分最重的错误之一。
中文的「了」是不是就等于现在完成时?
不是。「了」是完成体标记,可以出现在过去(我昨天吃了)、将来(等我到了就吃了饭)等多种时间里。只有「去过/见过/吃过」这类表经历的「过」句,才常常对应现在完成时的经验用法。判断时态请回到英语自身的时间词和现在关联上。
规则看懂了,轮到自己写就容易漏。把你的英语作文或邮件贴进 PromGee 免费语法检查工具,AI 会标出每处时态问题并用中文即时解析——把你的真实错误变成下一套练习题。
免费检查我的英语作文