每天学一点之Python100例(3~4)

每天学一点,形成一种知识复利

问题3:一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?
分析:从问题中我们这知道,这题的重点就是“完全平方数”。先了解下什么是完全平方数。
完全平方数:若一个数能表示成某一个整数的平方的形式,则称这个数为完全平方数。
将问题数学化,设一个整数为x,加上100后的完全平方数为m的平方,加上168的完全平方数为n的平方,求出这个x。
要获得m和n,我们就知道math里的开方函数sqrt
所以m = int(math.sqrt(x + 100)) n = int(math.sqrt(x + 100 +168))
另外再通过完全平方数去做判断,所以m * m == x + 100 并且 n * n == x + 100 +168
假设这个整数的范围是50000,我就可以通过循环在50000里找出x;

demoCode:
import math
def getSpecialNum():
for x in range(50000):
m = int(math.sqrt(x + 100))
n = int(math.sqrt(x + 100 + 168))
if (m * m == x + 100) and (n * n == x + 100 + 168):
print("number:",x)

getSpecialNum()

问题4:输入某年某月某日,判断这一天是这一年的第几天?
分析:输入等于input()函数,某年某月某日分3段输入,分别输入year,month,day
涉及年的判断,就要判断该年是否为闰年;所以如果是闰年,并且月份大于3月时需要多加一天。

demoCode:
#! /usr/bin/python3
year = int(input("year:\n"))
month = int(input("month:\n"))
day = int(input("day:\n"))

def whichDay(year, month, day):
month_days = [0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334]
month_each = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30 ,31]

if year < 0:
print("year input error!")
return 0

if 0 < month and month < 13:
which_day = month_days[month - 1]
else:
print("month input error!")
return 0

if (year % 400 == 0) or ((year % 4 ==0) and (year % 100 != 0)):
if (month == 2):
if (day < 0) or (day - 1 > month_each[month - 1]):
print("day input error!")
return 0
elif (day < 0) or (day > month_each[month - 1]):
print("day input error!")
return 0
else:
if (day < 0) or (day > month_each[month - 1]):
print("day input error!")
return 0

add_oneday = 0

if (year % 400 == 0) or ((year % 4 ==0) and (year % 100 != 0)):
add_oneday = 1

if (add_oneday == 1 ) and (month > 2):
which_day += 1

which_day += day
return which_day

ret = whichDay(year, month, day)

if(ret == 0):
print("input error!!!")
else:
print("The day is %dth day." % ret)


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值