我会用could,表推测的.can 应该也可以,但我不会用may
may / might have done 表示“过去可能做了某事”.may 比 might 表示的可能性在说话人看来稍大些.may/might not have done表示“过去可能没有做某事.”例如:
I can't find my keys.I may / might have left them at the school yesterday.我找不到我的钥匙了.我可能昨天把他们落在学校了.
can/could have done 表推测一般用在否定句和疑问句中,表示不相信或怀疑的态度.
Can/Could he have passed the exam?他可能通过了考试吗?
注:表示推测过去某动作发生的可能性时,就表示的可能性程度而言,must 最大,could 其次,may 更次之,might 最小.
(1)can,could后接完成式的用法:①在否定句或疑问句中表示对过去发生过的事情的“怀疑”或“不肯定”的态度,Could he have said so?②在肯定句中,可以表示过去可能做到而实际并没做到的事情,有“劝告”或“责备”的语气.如:---- When did you answer her letter?---- Only yesterday.---- It's too late.You could have answered it earlier,I am sure.
(2)may,might后接完成式的用法 ①表示对过去某事的推测,认为某一件事情在过去可能发生了.如果使用might,语气就比较婉转或更加不肯定,如:Mary might have learned some Chinese before.②可以表示过去本来可以做到而实际没有做到的事情,有“劝告”或“责备”的语气,如:You didn't do the work well that day.You might have done it better.
(3)must后接完成式的用法:表示对过去某事的推测,认为某事在过去一定做到 了,如:Liu Dong isn’t in the classroom.He must have gone to the library.