《Lua程序设计(第4版)》:第11.12章练习答案

11

--exercise11
local counter={}

for line in io.lines("redundant.txt","l") do
  for word in string.gmatch( line,"%w+" ) do
    counter[word]=-1
  end
end

for line in io.lines("stdin.txt","l") do
  for word in string.gmatch( line,"%w+" ) do
    if #word<4 or counter[word]==-1 then
      goto countinue
    end
    counter[word]=(counter[word] or 0)+1
    ::countinue::
  end
end

local words={}

for w in pairs(counter) do
  if counter[w]==-1 then
    goto countinue
  end
  words[#words+1]=w
  ::countinue::
end

table.sort(words,function(w1,w2)
  return counter[w1]>counter[w2] or counter[w1]==counter[w2] and w1<w2
end)

local n=math.min(tonumber(arg[1]) or math.huge,#words)

for i=1,n do
  io.write(words[i],"\t",counter[words[i]],"\n")
end

12章

日期秒数,1970年1月1日8:00(WINDOWS10,MINGW-gcc编译)到当前的秒数

日期表,包含year\month\day\hour\min\sec\wday\yday\isdst,wday表示本周总第几天(第一天是星期天),yday表示当年中第几天,isdst是夏时令时为true

os.time() 返回当前日期秒数

os.time(date) date为时间表,year、month、day不可忽略,hour、min、sec默认12:00:00。

os.date("*t") 返回当前时间表(isdst总是为false)

os.date("*t",sec) sec为时间秒数,返回此时间秒数的时间表(isdst总是为false)

os.date指示符

%a星期简写
%A星期全名
%b

月份简写

%B月份全名
%c日期和时间
%d一个月中第几天(01-31)
%H24小时制小时
%I12小时制小时
%j一年中第几天(001-366)
%m月份(01-12)
%M分钟(00-59)
%pam/pm
%S秒数(00-61,允许闰秒)
%w星期(0-6=Sunday-Saturday)
%W一年中第几周(00-53)
%x日期
%X时间
%y两位数的年份
%Y完整年份(2018)
%z

时区(中国标准时间)

%%%

当 os.date("!*t")  以 ! 开头时,时间表将以UTC时间返回。

-->UTC是GMT在原子时TAI的基础上校正而得,比GMT更加精确,每过几年通过闰秒调整一次。

os.difftime 计算两个日期秒数的差值。

os.clock 返回程序消耗的CPU时间,单位是s,但通常可以精确到微秒;常用来测试程序时间性能。

12.1

function exercise12_1(tab)
  tab.month=tab.month+1
  return os.date("*t",os.time(tab))
end
print(exercise12_1(os.date("*t")).month)

12.2

function exercise12_2(tab)
  return math.tointeger(os.date("%w",os.time(tab))+1)
end
print(exercise12_2(os.date("*t")))

12.3

function exercise12_3(tab)
  local temp={}
  for i,j in pairs(tab) do
    temp[i]=j
  end
  temp.hour=0
  temp.min=0
  temp.sec=0
  return math.tointeger(os.difftime(os.time(tab),os.time(temp)))
end
print(exercise12_3(os.date("*t")))

12.4

function exercise12_4(year)
  local nowdate={year=year,month=1,day=1}
  local temp=math.tointeger(os.date("%w",os.time(nowdate)))
  local sub=5-temp
  if sub<0 then
    sub=7-(temp-5)
  end
  return sub+1
end
print(exercise12_4(2017))

12.5

function exercise12_5(date1,date2)
  return os.difftime(os.time(date1),os.time(date2))/(24*3600)
end
temp1=os.date("*t")
temp2=os.date("*t")
temp2.year=temp2.year+2
print(exercise12_5(temp2,temp1))

12.6

function exercise12_6(date1,date2)
  local allmonth=date2.year*12+date2.month
  return date1.year*12+date1.month-allmonth
end
temp1=os.date("*t")
temp2=os.date("*t")
temp2.year=temp2.year+2
print(exercise12_6(temp2,temp1))

12.7

function exercise12_7()
  local date={year=2018,month=8,day=31}
  date.month=date.month+1
  date=os.date("*t",os.time(date))
  date.day=date.day+1
  date=os.date("*t",os.time(date))
  print(date.month,date.day)

  local date={year=2018,month=8,day=31}
  date.day=date.day+1
  date=os.date("*t",os.time(date))
  date.month=date.month+1
  date=os.date("*t",os.time(date))
  print(date.month,date.day)
  return
end
exercise12_7()

不同,月份天数不同就会导致不一样,如8月31日,结果是10月1日和10月2日。

12.8

function exercise12_8()
  return os.date("%z")
end
print(exercise12_8())

END

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Lua程序设计第4》是一本非常经典的Lua编程书籍,它介绍了Lua程序设计的基本概念和技巧,并提供了大量的实例和练习,适合初学者和有一定编程基础的人阅读。 这本书的PDF本非常方便,可以在电子设备上随时随地阅读。拥有PDF格式的书籍,读者可以通过搜索、书签、标注等功能,更好地管理和查找自己感兴趣的内容。此外,PDF本还可以进行页面放大、缩小、翻转等操作,适应不同设备和阅读需求。对于学习Lua编程的人来说,这本书的PDF本无疑是很有帮助的。 《Lua程序设计第4》从基础语法、数据类型、运算符等内容开始介绍Lua的基础知识,然后逐步深入到表、函数、模块等高级特性,还介绍了面向对象编程和异常处理等更高级的主题。通过阅读这本书,读者可以系统地学习Lua的各种语言特性和编程技巧,掌握Lua编程的基本原理和方法。 在阅读过程中,读者可以参考书中的实例代码进行练习,并通过实践来加深对Lua编程的理解和掌握。此外,书中还提供了一些练习题,可以帮助读者巩固所学知识,培养编程思维和解决问题的能力。 总之,《Lua程序设计第4》是一本很有价值的Lua编程书籍,提供了全面而深入的学习内容,适合想要学习Lua编程的读者阅读。PDF本的书籍具有便携性和便捷性,非常方便读者随时随地进行学习。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值