鱼C论坛

 找回密码
 立即注册
查看: 2012|回复: 6

[已解决]第005讲课后题提问

[复制链接]
发表于 2018-1-5 09:44:18 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
小甲鱼老师第005节留的课后题:判定给定年份是否为闰年,有两个问题:
1.老师答案中的
    while not temp.isdigit():
    temp = input("抱歉,您的输入有误,请输入一个整数:")
    这两句是何用意?
    以及temp.isdigit()是什么意思?
2.
year=input("请输入年份:")
temp1=year/4
if isinstance(temp1,int):
    print(year+"是闰年")
else:
    temp2=year/100
    if isinstance(temp2,int):
        print(year+"是闰年")
    else:
        print(year+"不是闰年")
以上为本人自己写的,请问哪里出错了?
最佳答案
2018-1-5 12:10:20
isdigit() ---如果字符串为数字则返回TRUE,否则返回flase
    while not temp.isdigit():
    temp = input("抱歉,您的输入有误,请输入一个整数:")
这里的逻辑:若输入非数字的信息,则要求重新输入
temp.isdigit() ---判断是否输入数字,not temp.isdigit() ---输入是否为非数字
input() 该函数返回的是字符串,可在命令行输入:type(input())查看结果
另外,关于润年的定义:能被100整除且能被400整除的是润年,除此外被4整除的也是润年
以下是个人的执行代码,仅供参考:
  1. temp = input("请输入一个年份:")
  2. while not temp.isdigit():
  3.     temp =input("输入的格式不对,请输入年份(YYYY):")

  4. if int(temp)%400 ==0:
  5.     print(temp + "年是润年")
  6. elif int(temp)%4 ==0 and int(temp)%100 !=0:
  7.     print(temp + "年是润年")
  8. else:
  9.     print(temp + "年不是润年")
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2018-1-5 09:51:51 | 显示全部楼层
isdigit()  如果字符串只包含数字则返回 True,否则返回 False。
temp1=year/4 #year是字符串,不能用除法
if isinstance(temp1,int): temp1是除法的值,都是浮点数。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-1-5 09:53:05 | 显示全部楼层
建议把前15课或者前20课的视屏看完再来做题,这个not temp.isdigit 意思是不是数字的话,year=input("请输入年份:")input进去的话是字符串str,所以我们要转化成int,哪里出错要自己调啊,这是稍微比较基础的了,所以你自己要先再看看基础的东西。建议买本小甲鱼的书,他的书可以说就是笔记吧。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-1-5 10:05:08 | 显示全部楼层
本帖最后由 pytjie 于 2018-1-5 10:10 编辑

1. temp.isdigit()函数用于判断字符串是否全为整数
while not temp.isdigit():   判断是否为整数,若不是则进入循环 重新输入
  temp = input("抱歉,您的输入有误,请输入一个整数:")     用户重新输入赋值给temp
2. 你得到的year是字符串  'str'类型,(可以用type()函数查看)
而不是整形不能运行除法运算,需要将其强制转换为整型: temp1 = int(year) / 4, temp2 = int(year) / 100

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-1-5 12:10:20 | 显示全部楼层    本楼为最佳答案   
isdigit() ---如果字符串为数字则返回TRUE,否则返回flase
    while not temp.isdigit():
    temp = input("抱歉,您的输入有误,请输入一个整数:")
这里的逻辑:若输入非数字的信息,则要求重新输入
temp.isdigit() ---判断是否输入数字,not temp.isdigit() ---输入是否为非数字
input() 该函数返回的是字符串,可在命令行输入:type(input())查看结果
另外,关于润年的定义:能被100整除且能被400整除的是润年,除此外被4整除的也是润年
以下是个人的执行代码,仅供参考:
  1. temp = input("请输入一个年份:")
  2. while not temp.isdigit():
  3.     temp =input("输入的格式不对,请输入年份(YYYY):")

  4. if int(temp)%400 ==0:
  5.     print(temp + "年是润年")
  6. elif int(temp)%4 ==0 and int(temp)%100 !=0:
  7.     print(temp + "年是润年")
  8. else:
  9.     print(temp + "年不是润年")
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-1-5 16:48:21 | 显示全部楼层
本帖最后由 冰封雪舞 于 2018-1-5 16:49 编辑

兄弟,你写的程序我找出4处错误
1.year = input('请输入年份'),这里input函数里边接受的东西是字符串类型的,无法直接参与计算,需要用int(input('请输入年份'))来转化为整数型,但是你需要判断输入的格式对不对,所以你可以改成:
year1=input("请输入年份:")
while not year1.isdigit():
    year1 = input ('输入的格式不对,请输入年份(YYYY):')
year = int(year1)
2.temp1 = year/4 if isinstance(temp1,int)这两句程序矛盾,因为我试验过,用/算的除法得到得数肯定是浮点型的,比如2000/100,它的结果是20.0,所以isinstance(temp1,int)这句话永远不会成立,无论输入任何年份程序运行结果都是不是闰年。
3.闰年的判断:能整除4的非整百年份或者整百年份能整除400的才是闰年,能整除100不能整除400的不是闰年。
4.你的print(year+"不是闰年")这句里边print函数用得不对,你这貌似是java的用法吧!phthon中不用+连接,你可以改成print(year,"不是闰年")这样中间会有个空格,也可以改成print("%d年不是闰年"%year)这种格式。
水平有限,但是真心希望对兄弟有所帮助。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-1-5 19:38:59 | 显示全部楼层
1. temp.isdigit()函数用于判断字符串是否全为整数
2.year=int(input('请您输入年份:'))
if year==0:
    print('退出程序')
    break
else:
    if year %400==0 or (year%4==0 and year%100!=0):
        print('{}是润年'.format(year))
    else:
        print(str(year)+'不是润年')
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2026-3-5 11:10

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表