跳转到正文

语法练习

虚拟语气练习题 25 道:if / wish / as if(答案+解析)

一句话判断法:虚拟语气就是「时态倒退一步」——事情与现在相反,动词退到过去时;与过去相反,退到 had done;主句则用 would(have)+ 动词原形或过去分词。下面 25 道题从基础到高考、四级、考研水平,每题点击后即时批改,并解释中文「要是我早点知道就好了」为什么在英语里必须让动词变形两次,才能透出「这是假的」这层含义。

作者: Raheel Ashraf预计阅读:约20分钟

免费练习: 英语语法在线练习(含答案)

先给结论:英语没有专门的虚拟动词,它用「时态倒退一步」来标记「我说的不是真的」——与现在事实相反,if 从句把时态退成过去时(be 动词一律用 were),主句配 would + 原形;与过去事实相反,退成过去完成时 had done,主句配 would have + 过去分词。中文只靠「要是……就好了」「幸亏没……」这些虚词和语境就把假设讲清楚,动词一个字都不用变,所以中国学习者不是不懂虚拟,而是忘了让动词也「变个脸」来报警:这句话是假设。

下面的 25 道题按「基础 · if 虚拟两步退 → 进阶 · wish、as if、would rather、It's high time → 挑战 · 错综时态、含蓄虚拟与 suggest/insist」分为三组,每道题点击选项后立即批改,并给出中文解析:统一的解题框架就是倒退法,做完你会发现所谓虚拟语气,只是「倒退一步、再倒退一步」的把戏。

虚拟语气 25 题小测

题目每轮 10 道,共 25 道。完成一轮即可继续;所有题目和答案也列在下方。

1 / 10

基础 · if 虚拟两步退

If I ___ you, I would apologize to her right away.

全部题目、答案与解析完成练习后展开核对。
  1. 1. If I ___ you, I would apologize to her right away.

    • was
    • were
    • am

    正确答案: were · 与现在事实相反(我不可能是你),时态倒退一步用过去时;虚拟句里 be 动词不分人称一律用 were,这是考试铁律。口语里 If I was you 偶有所闻,但高考、四级、考研一律以 were 为准,看到 you 也别犹豫。

  2. 2. If he ___ here now, he would know exactly what to do.

    • were
    • is
    • had been

    正确答案: were · now 点明与现在相反:他现在不在这儿,倒退一步用 were,主句 would know 照应。had been 留给「与过去相反」的句型,时间轴对不上就坚决不选——倒退一步是相对「事实所在的时间」而言的。

  3. 3. If she ___ more free time, she would learn the piano.

    • has
    • had
    • will have

    正确答案: had · 与现在相反(她其实没时间),has 倒退一步变 had,主句 would + 原形照应。中文「如果有空就学钢琴」看不出真假,英语的 had 就是那个「这是假设」的暗号,做题时看到主句 would 立刻回头找倒退。

  4. 4. If you had told me earlier, I ___ you a hand.

    • would give
    • would have given
    • had given

    正确答案: would have given · 与过去相反(你当时没说),从句用 had done,主句倒退两步变 would have + 过去分词:would have given。口诀「从句 had done,主句 would have done」,两边都要退,只退一边就是错误选项 would give 的来源。

  5. 5. She would have caught the early train if she ___ up earlier.

    • got
    • would get
    • had gotten

    正确答案: had gotten · 主句已经给出 would have caught,锁定与过去相反,if 从句必须配套 had gotten。注意 if 从句里永远不填 would——倒退发生在从句,would 只出现在主句,这是虚拟句最常见的错配。

  6. 6. If they had set off at eight, they ___ there well before noon.

    • would get
    • would have got
    • had got

    正确答案: would have got · had set off 表明与过去相反(他们没在八点出发),主句按套餐配 would have + 过去分词:would have got。中文「要是八点出发就好了」把假设藏在「要是」里,英语则把它摊进两个动词形态里,两边都要核对。

  7. 7. If I ___ about the party, I would have invited you too.

    • know
    • knew
    • had known

    正确答案: had known · 主句 would have invited 指向过去(你其实没被邀请),从句倒退两步用 had known。看到「would have + 分词」就条件反射配「had done」,这是虚拟语气第一套餐,也是高考和四级常考的形式。

  8. 8. I wish I ___ taller — then I could try out for the team.

    • am
    • were
    • have been

    正确答案: were · wish + 过去时表与现在相反的愿望(我希望自己更高,可事实如此不能改),be 动词照旧一律 were。wish 后面的倒退是对「现在」退一步,愿望落空的怅惘全在这一步里。

  9. 9. I wish I ___ her advice last month instead of ignoring it.

    • followed
    • had followed
    • would follow

    正确答案: had followed · Wish 后面的形式取决于所希望改变的情况:I wish I knew 表示现在的愿望,I wish I had known 表示过去的遗憾,I wish you would call 表示希望对方改变行为。Would 并非永远不能出现在 wish 从句中。

  10. 10. He speaks English as if he ___ a native speaker.

    • is
    • were
    • had been

    正确答案: were · as if 从句与现在事实相反(他不是母语者)时倒退一步用 were,与 if 虚拟同一套逻辑。注意:如果情况可能是真的(It looks as if it is going to rain),不倒退也行——「假想才倒退,可能不勉强」是这题的分水岭。

  11. 11. She talked about the film as if she ___ it herself.

    • has seen
    • had seen
    • saw

    正确答案: had seen · talked 发生在过去,「看过电影」比 talk 更早,倒退两步用 had seen。as if 的倒退以主句时间为锚点:与主句同时退一步,先于主句退两步,锚点判断和叙事时态一脉相承。

  12. 12. I'd rather you ___ smoke in the house.

    • didn't
    • don't
    • not

    正确答案: didn't · would rather + 从句(指现在或将来的事)倒退一步用过去时:I'd rather you didn't smoke。中文「我宁愿你别在屋里抽烟」没有时态痕迹,英语却要求 you 后面跟 didn't 而不是 don't,这一步倒退表达的是「委婉的不情愿」。

  13. 13. I would rather ___ at home than go to that noisy party.

    • stay
    • to stay
    • staying

    正确答案: stay · would rather 后面直接跟不带 to 的动词原形,结构是 would rather do A than do B。这题考的是词型不是时态:一看到 to 或 -ing 就想当然,恰恰掉进「rather 后接不定式」的经典误导选项。

  14. 14. I'd rather you ___ me the truth yesterday.

    • didn't tell
    • hadn't told
    • not tell

    正确答案: hadn't told · yesterday 说明是对过去的后悔:would rather + 主语 + had done,与 wish + had done 同构。和上题对照——指现在退一步(didn't),指过去退两步(hadn't),时间状语是唯一的裁判。

  15. 15. You've been watching screens for hours. It's high time you ___ to bed.

    • go
    • went
    • will go

    正确答案: went · It's (high) time + 主语 + 过去时,是虚拟语气里最短小的固定句型:went。high 只加强语气「早该睡了」,不改变形式。注意没有 to go 的余地——这个句型用「时态倒退」表达「本应已经发生」,比 should 更不耐烦。

  16. 16. I wish you ___ make so much noise while I'm on calls.

    • wouldn't
    • didn't
    • not

    正确答案: wouldn't · wish + would(n't) 专门抱怨别人反复的讨厌行为,盼望对方「肯改」:I wish you wouldn't make so much noise。与上题 wish + 过去时(抱怨状态)不同,这条针对「可控的行为」,语气是吐槽而不是怅惘。

  17. 17. If only we ___ enough time to prepare for the show!

    • had
    • have
    • would have

    正确答案: had · if only(要是……该多好)与 wish 同族:与现在相反倒退一步用 had。它比 I wish 更强烈,常用于感叹句,高考和考研翻译中,「但愿」常对应 if only / wish 加倒退结构。

  18. 18. If he hadn't missed the last bus, he ___ here with us now.

    • were
    • would be
    • would have been

    正确答案: would be · 错综时态(混合虚拟):从句与过去相反(hadn't missed),主句却与现在相反(now),各退各的时间轴——主句用 would + 原形:would be。中文「要不是赶不上末班车他早到了」时间两层,动词零变化,英语必须分别用 had done 和 would be 各自报警。

  19. 19. If she ___ a careful driver, she wouldn't have crashed last night.

    • was
    • were
    • had been

    正确答案: were · 反方向的错综时态:「开车小心」是延续到现在的性格特质(与现在相反用 were),撞车却发生在昨晚(wouldn't have crashed)。别被 last night 勾着全选 had done——从句管的是「她是什么样的人」,锚点在现在。

  20. 20. But for your help, I ___ the deadline last night.

    • didn't meet
    • wouldn't have met
    • hadn't met

    正确答案: wouldn't have met · but for = without(要不是),它把整个 if 从句压缩成一个名词短语:本句等于 If it had not been for your help。与过去相反,主句照旧 would have done:wouldn't have met。含蓄虚拟的解题第一步,永远是把介词短语还原成 if 从句。

  21. 21. Without his advice, we ___ the wrong way.

    • didn't go
    • would have gone
    • had gone

    正确答案: would have gone · without + 名词 = 「要是没有……」,还原成 If we had not had his advice 后,与过去相反的立即搭配 would have gone。做完题别忘了对照现实:他的建议确实有了、我们确实没走错——虚拟句的隐含意义恰恰是现实。

  22. 22. He hid behind the curtain quickly; otherwise the guard ___ him.

    • saw
    • would see
    • would have seen

    正确答案: would have seen · otherwise(否则)承接前文的真实事实「藏得快」,对未发生的过去进行假设:否则卫兵「本来会看见他」,与过去相反用 would have seen。otherwise 是含蓄虚拟的连词版,规则一样:先还原 if 从句,再定时间轴。

  23. 23. The teacher suggested that every student ___ the essay once more.

    • read
    • reads
    • reading

    正确答案: read · suggest(建议)类的 that 从句用「(should) + 动词原形」,should 常被省略:suggested that every student (should) read。正因为 should 被省略,主语是三单也看不见 -s——reads 就是给「时态一致」习惯设的埋伏。

  24. 24. The doctor insisted that Mr. Lin ___ smoking at once.

    • stops
    • stop
    • stopped

    正确答案: stop · insist 表「坚决要求」时,从句同样用 (should) + 原形:insisted that Mr. Lin (should) stop。注意一词两副面孔——insist 表「坚称」时从句照常用真实时态(He insisted that he was innocent),suggest 表「暗示」同理,考的就是先辨动词义。

  25. 25. His suggestion that the vote ___ put off was turned down.

    • be
    • is
    • will be

    正确答案: be · suggestion 的名词同位语从句同样继承虚拟套餐:that the vote (should) be put off,被动也用原形 be。这类题的辨认顺序:先找到 suggestion/order/request/demand 等「要求类」名词或动词,再让后面从句一律交出时态,换成原形。

将此测验布置给全班

免费使用,学生无需注册账号。

教师使用提示(英文页面)

规则速览:一张倒退时间表

虚拟语气的全部形态可以压缩成一张表:先确定「假设」与哪个时间相反,再决定退几步。与现在相反:从句过去时(were 通用),主句 would + 原形;与过去相反:从句 had done,主句 would have done;与将来相反(可能性很小):从句 should do / were to do,主句 would + 原形。从句永远是「倒退」的一方,主句永远是「would」的一方,两边的时间轴还要分别核对——这就是错综时态的解法。

  • if 与现在相反:did / were → would do。(If I were you, I would go.)
  • if 与过去相反:had done → would have done。(If you had called, I would have come.)
  • wish:与现在相反 + did;与过去相反 + had done;抱怨他人 + would do。
  • as if:假想才倒退,可能不倒退(It looks as if it is going to rain 合法)。
  • would rather + 从句:指现在 did,指过去 had done。
  • It's (high) time + 从句:一律过去时。
  • suggest / insist / order / demand + that 从句:(should) + 动词原形,should 常省略。

做题第一步永远是「找锚点时间」:句子里有 now 还是 yesterday / last night?锚点决定退一步还是退两步,很多丢分都出在锚点判断上。

常见陷阱:五个最容易丢分的句型

以下五类是高考、四级和考研虚拟语气的高频失分点,做完练习后逐条对照,看自己踩了哪几条。

  • ✗ If I would have known, I would have helped. → ✓ If I had known…(would 不能住进 if 从句)
  • ✗ I wish I can fly. → ✓ I wish I could fly.(wish 后必须倒退,can 变 could)
  • ✗ If you had taken the medicine, you wouldn't be so sick now. 误判为全过去 → 保留 be 而不是 have been(从句过去、主句现在的错综句)
  • ✗ He suggested that I should to see a doctor. → ✓ …that I (should) see a doctor.(should 后接原形,不带 to)
  • ✗ It's high time we go home. → ✓ It's high time we went home.(这个句型只认过去时)

为什么中文母语者总在这里出错:假设不用动词买单

中文表达虚拟完全依赖虚词和语境:「要是早点遇到你就好了」「否则我就惨了」——动词「遇到」「惨」不发生任何变化,假设身份由「要是」「就好了」全包。英语的报警系统却多开了一条道:除了 if、otherwise 这类连接词,动词自己也要变形示警(had met / would have been)。中文母语者读题时往往「感觉」已经到位,手写的句子却只有连接词在孤军奋战,动词一个都没退——这是虚拟语气常见的失分原因。

第二道坎是倒退的方向感:中文「与现在相反」和「与过去相反」的区分靠时间副词(今天/昨天),英语却要动词时态自证。所以 If I knew 和 If I had known 在中文里都可能译成「如果我知道」,考点却完全不同——前者假设「我现在不知道」,后者假设「当时我不知道」。解决办法是把倒退法练成反射:先圈时间锚点,再机械地「退一格」,不给中文语感插嘴的机会。

背熟两个「万能反问」:这事是真的吗?——不是,就倒退。倒退几步?——退到时间锚点的前一格。

如何有效练习:把倒退练成条件反射

虚拟语气的规则量其实不大,失分多半在「想不起来用」。建议每天完整做一遍上面的 25 题,连续一周,做题时对每题都口头复述「与什么相反、退几步、主句配什么」,让套餐式搭配长在语感里;然后把错题按「锚点错配 / would 进了从句 / 混合时态没拆句」三类归档,专门回炉。

虚拟语气在写作里也极易自查:把你写的英语作文或翻译贴进 PromGee 的免费语法检查工具,它会标出可能有问题的动词时态并解释规则依据,适合作为写完后的一道核对——但虚拟语气的判断仍需要你自己复核。

继续练习

常见问题

虚拟语气里的 be 动词为什么不分人称都用 were?

If I was 在标准非正式及许多中性语境中都很常见。If I were 是虚拟条件的传统形式,在正式写作中经常使用;不能把 was 一律判为错误。

wish + 过去时和 wish + 过去完成时怎么选?

看愿望对着哪个时间:与现在相反用过去时(I wish I had more time,现在没时间),与过去相反用 had done(I wish I had studied harder,当初没努力)。句末有 last year、then 这类过去锚点的,通常是 had done。

suggest 后面到底接 doing 还是 (should) do?

分两种:suggest 表「建议」时,若接 that 从句必须用 (should) + 动词原形(suggest that he see a doctor);若主语直接接动作则用 doing(suggest going out)。表「暗示、表明」时(His silence suggested that he was angry)从句用正常时态,不倒退。

英语学习平台

在 PromGee 英语学习平台上练习全部 13 个类别。题目与您的水平相匹配,每道题的答案都有讲解,学习进度会保存到您的账号中。

免费检查我的英语作文

参考来源

继续阅读:更多英语语法与核心表达精选指南

测一测你的英语水平: 免费英语水平测试(A1–C2)

正在挑选英语学习应用? PromGee vs Duolingo