darrenkwan 发表于 2020-3-21 17:13:50

关于课后作业闰年计算

我有个逻辑问题, 用year/400 == int(year/400): 表达闰年的话, 因为int()是整形,那比400少的年份,全部会取0,就满足这个条件了, 然而并不是,例如:50.返回是闰年,但明显不是.   那结果是不是应该把后面的逻辑先提上来才对.

year=0
temp = input('请输入一个年份:')
while not temp.isdigit():
    temp = input("抱歉,您的输入有误,请输入一个整数:")

year = int(temp)
if year/400 == int(year/400):
    print(temp + ' 是世纪闰年!')
else:
    if (year/4 == int(year/4)) and (year/100 != int(year/100)):
        print(temp + ' 是闰年!')
    else:
        print(temp + ' 不是闰年!')

darrenkwan 发表于 2020-3-21 17:15:40

代码用这段吧. 上面的复制错了, 但做法是一样的
t=3
year=0
print('***u got', t, 'chance***')
print('pls type in a year: ',end=' ')
while t>0:
    tmp=input()
    print('\n***u got', t-1, 'chance left***')
    while not tmp.isdigit():
      tmp=input('error, pls type in a number: ')
      year=int(tmp)
    if year/400==int(year/400):
      print('''这是世纪闰年.\ntry again: ''', end=' ')
    else:
      if year/4==int(year/4) and year/100!=int(year/100):
            print('''这是普通闰年.\ntry again: ''', end=' ')
      else:
            print('''这不是闰年.\ntry again: ''', end=' ')
    t=t-1   
print('\ngame over')
      

zltzlt 发表于 2020-3-21 17:18:02

darrenkwan 发表于 2020-3-21 17:15
代码用这段吧. 上面的复制错了, 但做法是一样的

这样试试:

t = 3
year = 0
print('***u got', t, 'chance***')
print('pls type in a year: ', end=' ')
while t > 0:
    tmp = input()
    print('\n***u got', t - 1, 'chance left***')
    while not tmp.isdigit():
      tmp = input('error, pls type in a number: ')
    year = int(tmp)
    if year / 400 == int(year / 400):
      print('''这是世纪闰年.\ntry again: ''', end=' ')
    else:
      if year / 4 == int(year / 4) and year / 100 != int(year / 100):
            print('''这是普通闰年.\ntry again: ''', end=' ')
      else:
            print('''这不是闰年.\ntry again: ''', end=' ')
    t = t - 1
print('\ngame over')

darrenkwan 发表于 2020-3-21 17:26:50

zltzlt 发表于 2020-3-21 17:18
这样试试:

我的执行也没有问题, 不是格式问题. 只是因为int()的返回的机制使他们都取了0这个结果.算是一个bug吧
400以下的年份会与实际不符, 例如我输入50, 他显示是实际闰年, 实际上根本就不是闰年.

sunrise085 发表于 2020-3-21 17:37:41

darrenkwan 发表于 2020-3-21 17:26
我的执行也没有问题, 不是格式问题. 只是因为int()的返回的机制使他们都取了0这个结果.算是一个bug吧
40 ...

你为什么要判断除法的商呢?难道不应该判断求余的结果吗?
第十行的缩进写错了。导致year一直是0
t=3
year=0
print('***u got', t, 'chance***')
print('pls type in a year: ',end=' ')
while t>0:
    tmp=input()
    print('\n***u got', t-1, 'chance left***')
    while not tmp.isdigit():
      tmp=input('error, pls type in a number: ')
    year=int(tmp)#这里缩进写错了。
    if year%400==0:
      print('''这是世纪闰年.\ntry again: ''', end=' ')
    else:
      if year%4==0 and year%100 !=0:
            print('''这是普通闰年.\ntry again: ''', end=' ')
      else:
            print('''这不是闰年.\ntry again: ''', end=' ')
    t=t-1   
print('\ngame over')

darrenkwan 发表于 2020-3-21 18:05:34

sunrise085 发表于 2020-3-21 17:37
你为什么要判断除法的商呢?难道不应该判断求余的结果吗?
第十行的缩进写错了。导致year一直是0

厉害呀, 找到错处了. 可惜最佳答案我给出去了.
开始怕自己写的代码找不出问题...
页: [1]
查看完整版本: 关于课后作业闰年计算