“带上你的千军万马!虽然终不免孤身奋战!”
import math
n = input()
s=sum(math.factorial(int(i)) for i in n)#这里使用推导式
if int(n) == s:
print('YES')
else:
print('NO')
这里就感觉python的函数和推导式好用哈
k=eval(input())
p=0
f=1
l=0
while pow(2*l+1,-1)>=k:
p=p+pow(2*l+1,-1)*f
f=-f
l=l+1
print("{:.6f}".format(p*4))
import math
n=eval(input())
p=0
l=1
while pow(math.factorial(l),-1)>=n:
p=p+pow(math.factorial(l),-1)
l=l+1
print("{:.8f}".format(p+1))
这两道都是流程控制的题,看到阈值就大概有了了解,就是通过一个类似阈值的形式控制你的计算结果。
def f(x):
return x ** 5 - 15 * x ** 4 + 85 * x ** 3 - 225 * x ** 2 + 274 * x - 121
def bisection_method(low, high):
while True:
mid = (low + high) / 2
if abs(f(mid)) < 1 * 10 ** -n:
return '{:.6f}'.format(mid)
elif f(mid) < 0:
high = mid
else:
low = mid
if __name__ == '__main__':
n = int(input())
Low, High = 1.5, 2.4
print(bisection_method(Low, High))
这里二分法找零点,我们需要写两个函数,一个用来计算函数的值,一个用来判断,并且使用二分法递归。
import math
a, b = map(float, input().split()) # 输入区间起点和终点
n = int(input()) # 输入区间切分数量
area = 0 # 面积初值
x = a # 设定起点x值
dx = abs(a - b) / n # 计算每个小区间的高度,即每个小梯形的高度
for i in range(n): # 遍历n个区间,计算每个小梯形面积并累加到一起
area = area + dx * (abs(math.sin(x + i * dx)) + abs(math.sin(x + i * dx + dx))) / 2
print("{:.2f}".format(area)) # 输出面积值
这里的dx=abd(a=b)/n,然后在循环中叠加面积,但是他每个小长方形的高是左边端点和右边端点的和的二分之一,这搞清楚就可以计算每个小长方形的面积,然后汇总求和,保留小数位输出就可以了。
n=eval(input())
ls=[]
sum=0
for i in range(1,n):
if i%7!=0 and '7' not in str(i):
ls.append(i)
sum=sum+pow(i,2)
print(ls)
print(sum)
用到列表元素的添加,ls.append(i),将i元素加入到列表中,之后判断7在不在这个数字的十进制的某位,我们可以用str()函数把i转为字符串类型,然后用 not in 判断7是否在i中。
num, money = map(int, (input().split()))
flag = 0
for x in range(1, money // 5 + 1):
for y in range(1, money // 3 + 1):
z = num - x - y # 鸡雏的数量等于总数减鸡翁和鸡母的数量
if z % 3 == 0 and z > 0 and 5 * x + 3 * y + z // 3 == money:
print(x, y, z)
flag = 1 # 如果找到满足的解那么flag从0变为1
# 如果找不到满足的解则输出无解
if flag == 0:
print('无解')
这道题之前做过,但这个代码做了一点优化,省去了不必要的循环次数。
n = int(input())
rat, mouse, day, time = 1, 1, 0, 1
distance_of_rat, distance_of_mouse = 0, 0 # 大老鼠和小老鼠的打洞距离
while n > 0:
if n - mouse - rat < 0:
time = n / (mouse + rat)
n = n - mouse - rat
distance_of_mouse = distance_of_mouse + time * mouse
distance_of_rat = distance_of_rat + time * rat
rat = rat * 2
mouse = mouse / 2
day = day + 1
print(day)
print(round(distance_of_mouse, 1), round(distance_of_rat, 1))
这道题我还是掉坑里了,没有考虑到最后两只老鼠相接的情况,那一天的不一定是用了一整天,所以要进行特殊处理一下:time=n/(mouse+rat)
然后就可以做出来了。
import datetime
year = int(input()) #输入任意年份
days = [datetime.date(year, i, 13) for i in range(1, 13)] #产生该年每个月13日 的列表
for i in days:
if i.isoweekday()==5:
print(i)
这道题用c或者c++来处理的话还是比较难处理的,因为你你不清楚每一天到底是周几,所以python也不能用那种方式去做,直接调用接口,使用函数就可以,看代码,导入datetime库,i.isoweekday()可以获取当天是周几。
import datetime # 导入datetime模块用于获取当年年份
def leap(year):
return True if (year % 400 == 0) or (year % 4 == 0 and year % 100 != 0) else False
# 校验身证号中的年月日及校验码
def check_date(id_num):
"""校验身证号中的年月日,年月日值均要合法"""
# 年份超过当前年,或月份小于1或大于12,或日期小于1或大于31时非法
if int(id_num[6:10]) > datetime.datetime.now().year or int(id_num[10:12]) < 1 or int(id_num[10:12]) > 12 or int(
id_num[12:14]) < 1 or int(id_num[12:14]) > 31:
return False
if int(id_num[10:12]) in [4, 6, 9, 11] and int(id_num[12:14]) > 30: # 当月份为4,6,9,11时,日期超过30即非法
return False
if int(id_num[10:12]) == 2 and int(id_num[12:14]) > 29: # 月份为2时,日期大于29便非法
return False
if int(id_num[10:12]) == 2 and leap(int(id_num[6:10])) == False and int(
id_num[12:14]) > 28: # 月份为2时,如果不是闰年,日期大于28便非法
return False
else:
return True
def check_sum(id_num):
"""计算检验位"""
ls = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2, 1]
id_num_sum = sum([ls[i] * int(id_num[i]) for i in range(17)]) # 计算校验和
if id_num[17] == 'X':
return True if id_num_sum % 11 == 2 else False
elif (id_num_sum % 11 + int(id_num[17])) % 11 == 1:
return True
else:
return False
def print_info(id_num):
"""输出信息"""
year = int(id_num[6:10])
month = id_num[10:12]
day = id_num[12:14]
if len(id_num) == 18 and check_date(id_num) and check_sum(id_num): # 先判断长度是否是18位,再判断校验和
gender = '女' if int(id_num[16]) % 2 == 0 else '男'
print('身份证号码校验为合法号码')
print('出生:{}年{}月{}日'.format(year, month, day))
# print('年龄:{}'.format(datetime.datetime.now().year - year))
print('性别:{}'.format(gender))
else:
print('身份证校验错误')
if __name__ == '__main__':
id_number = input()
print_info(id_number)
这道题直接看代码吧
n = int(input())
s = 'A'
if 1<=n<7:
for i in range(n):
for j in range(n-i):
print(s,end = ' ')
s=chr(ord(s)+1)
print()
这里了解ord()函数:
ord()函数是Python中的一个库函数,用于从给定字符值中获取数字值,它接受一个字符并返回一个整数,即用于将字符转换为整数,即用于获取ASCII给定字符的值 。
还有chr()函数:
chr()函数是Python中的一个库函数,用于从给定的ASCII码 (整数值)中获取字符值,它接受一个数字(应为ASCII码 )并返回字符。
try:
TempStr = input()
if TempStr[-1] in ['F', 'f']:
C = (eval(TempStr[0:-1]) - 32) / 1.8
print("{:.2f}C".format(C))
elif TempStr[-1] in ['C', 'c']:
F = 1.8 * eval(TempStr[0:-1]) + 32
print("{:.2f}F".format(F))
else:
print("输入错误,末位只能是'C','c','F','f'")
except NameError:
print('试图访问的变量名不存在')
except SyntaxError:
print('存在语法错误')
except Exception as e:
print(e)
这里注意异常处理。
s = input()
try:
if 2 <= len(s) < 4 and 1 <= int(s[:-1]) <= 17:
if s[-1] in ['A', 'a', 'F', 'f']:
print('窗口')
elif s[-1] in ['C', 'c', 'D', 'd']:
print('过道')
elif s[-1] in ['B', 'b']:
print('中间')
else:
print('座位号不存在')
else:
print('座位号不存在')
except:
print('座位号不存在')
in 和 异常判断
def isprime(n):
for i in range(2,int(n**0.5)+1):
if n%i==0:
return False
else:
return True
def f(n):
sumPrime,count=0,0
for i in range(n,1,-1):
if isprime(i):
sumPrime = sumPrime + i
count = count + 1
if count == 10:
return sumPrime
num = int(input())
print(f(num))
先写一个判断是不是素数的函数,然后要求最大的十个素数,我们可以倒着循环。
def is_prime(n):
"""判断素数的函数,接收一个正整数为参数,参数是素数时返回True,否则返回False
减小判定区间,减少循环次数,提升效率。
"""
if n < 2:
return False # 0、1、负数以及偶数都不是素数
for i in range(2, int(n ** 0.5) + 1):
if n % i == 0: # 能被2到其根号n之间的整数整除的数不是素数
return False
else:
return True # for循环正常结束,未遇到return的数是素数
def palindromic(num):
"""接收一个数字为参数,判定其是否为回文数,返回布尔值。"""
if str(num) == str(num)[::-1]:
return True
else:
return False
def output_prime(num):
"""接收一个正整数num为参数,在一行中从小到大输出前num个回文素数。
函数无返回值
"""
i = 2 # 从最小的素数2开始测试
count = 0 # 计数器置0
while True: # 无限循环
if palindromic(i) and is_prime(i): # 先判断回文再判断素数,效率高
print(i, end=' ') # i为回文素数时输出i,输出后不换行
count = count + 1 # 每发现一个回文素数计数增加1
if count == num: # 如果找到回文素数数量与要求数量相同时
break # 结束循环
i = i + 1 # 测试下一个数字
if __name__ == "__main__":
n = int(input())
output_prime(n)
判断是不是回文数可以这样:str(num) == str(num)[::-1]
不管是流程控制还是写函数,都要明确每一步的目的