文章目录
前言
今天我们接着练习,哈哈,做题之前就扯点一些无关的事,提一个问题:你们觉得游戏的退游正常吗
为什么这么问哈,因为昨天朋友突然问我原神为什么不玩了,我说我退游了,他就感慨了一些,说白瞎了你的账号,哈哈哈,那一瞬间就突然有点负罪感,感觉不该退游的,也许是兴趣散了,也许是过了那个阶段,也许是曾经一起玩的人都离开了,当然那个朋友也玩,只不过我们很少一起玩罢了,所以在很长的刷本中,我退游了。其他的游戏也差不多是这样。
我很难受,但是白瞎就白瞎了吧,哈哈哈,该离开也是要离开的。
好了,开始正经写题了哈。
1、正负交错数列前n项和
这道题,主要看式子的规律,分子的规律很好找,就是除了第一项,其他的就是从1开始递增,如:1,2,3,4,5 这样,分母的话,仔细看是前两项分母之和就是本次的分母值。
我这里先上自己写的。
n=eval(input())
s=0
a=1 #a为分子
b=2 #b为分母
t=1 #用来储存前两项的分母
flag=-1 #设置flag进行变号
while(n>1): #因为从第二项开始,所以只要n减到1
n=n-1
s=s+flag*(a/b) #计算后n-1项,结果存入s
k=b #k记录这次的分母
b=b+t #更新这次的分母值,k变为记录上一次的分母值
a=a+1
flag=-flag
t=k #这里t变为k,b也就是在下次循环中的上一次分母,所以有b=b(前一项分母)+t(前两项分母)
print("{:.6f}".format(1+s))#加上第一项 1+s
然后看下答案的写法:
n = int(input())
result = 1 # 首项的值,作为累加初值
sign = -1 # 符号,第二项是负值,
previous, current = 1, 1 # 分母数字的初值,从第二项开始符合这个规律
for i in range(1, n): # 从1到n-1遍历n-1次
previous, current = current, previous + current # 下一个数值是前面两个数的加和
result = result + sign * i / current # 注意分子是 i
sign = -sign # 改变正负号
print('{:.6f}'.format(result))
的确很简便,通过循环改变分子,然后分母只需要两个变量前后交替改变就可以做到正确赋值了。
2、十进制整数转二进制
这是一道简单的转进制的题,我们在c和c++中已经做过好多遍,这里提出来就是想复习一下python的进制转换的内置函数:
- 二进制:bin()
-
- 八进制:oct()
-
- 十进制:int()
-
- 十六进制:hex()
所以这道题可以直接:
n=eval(input())
k=bin(n)
print(k[2:])
为什么要k[2:]截断一下呢,因为通过函数转换他会有两位进制标志如0x等,所以去掉前两位就可以了。
3、统计学生平均成绩与及格人数
score = list(map(int, input().split())) # 通过map()和list()函数把用户输入转化成int列表
average = sum(score) / len(score) # 用总和除以数量得到平均分
count = len(list(x for x in score if x >= 60)) # 通过列表推导式得到大于60分的列表然后用len()函数得到数量
print("average = {}".format(average))
print("count = {}".format(count))
这道题,我们主要学习的就是他的接受方式和一个列表推导式,
首先得了解,map()和input.split():
map() 会根据提供的函数对指定序列做映射。
第一个参数 function 以参数序列中的每一个元素调用 function 函数,返回包含每次 function 函数返回值的新列表。
input.split()函数是对输入的字符串进行按位分割,默认是空格。
list()函数就是将内容转化为列表形式。
对于列表表达式:
python 的列表表达式有以下两种写法:
[表达式 for 变量 in 列表]
[表达式 for 变量 in 列表 if 条件]
4、百钱买百鸡A
for cock in range(1, 101): # 公鸡数量不为0且小于或等于100
for hen in range(1, 101): # 母鸡数量不为0且小于或等于100
for chicken in range(1, 101): # 小鸡数量大于0小于等于100且是3的倍数
if chicken % 3 == 0:
if cock + hen + chicken == 100 and 5 * cock + 3 * hen + chicken // 3 == 100:
print(cock, hen, chicken) # 遇到满足条件的数字组合就输出
5、今天是第几天
啧啧,这道题是用到了咱这篇文章的第三题的接受输入的方式,然后就是一个判断了:
def pd(n):
if n%4==0 and n%100!=0 or n%400==0:
return 1
else :
return 0
s=list(map(int,input().split("/")))
day=0
k=[31,28,31,30,31,30,31,31,30,31,30,31]
for i in range(s[1]-1):
day=day+k[i]
day=day+s[2]
if pd(s[0]) and s[1]>2:
day=day+1
print("{}年{}月{}日是{}年第{}天".format(s[0],s[1],s[2],s[0],day))
6、计算整数 n 的阶乘
这里注意类型的判断可以采用type函数来获取变量类型,然后使用math.factorial()计算阶乘
import math
n=eval(input())
if n>=0 and type(n)==int:
print(math.factorial(n))
else:
print("ERROR")
7、判断是否直角三角形
先判断是不是三角形,之后再判断是不是直角三角形
a=eval(input())
b=eval(input())
c=eval(input())
k=0
if a<b+c and b<a+c and c<a+b:
k=1
if pow(c,2)==pow(b,2)+pow(a,2) or pow(a,2)==pow(b,2)+pow(c,2) or pow(b,2)==pow(a,2)+pow(c,2):
if k==1:
print("YES")
else:
print("NO")
else:
print("NO")
8、出租车计费
s,t=map(int,input().split(","))
h=0
if s<=3:
h=h+13
elif s<=15:
h=h+(s-3)*2.3+13
elif s>15:
h=h+(15-3)*2.3+(s-15)*2.3*1.5+13
h=h+t
print(int(h))
9、一元二次方程求根
a = float(input())
b = float(input())
c = float(input())
delta = b * b - 4 * a * c
if a == 0 and b != 0:
print('{:.2f}'.format(- c / b))
elif a == 0 and b == 0:
print('Data error!')
elif delta < 0:
print("该方程无实数解")
elif delta == 0:
#print(round(-b / (2 * a),2))
print('{:.2f}'.format(-b / (2 * a)))
else:
x1 = (-b + delta ** 0.5) /( a * 2)
x2 = (-b - delta ** 0.5) /(a * 2)
if x1 < x2:
x1,x2=x2,x1
#print(round(x1,2),round(x2,2)) # round()函数获得的浮点数会自动转为最短表示,例如round(3.10000, 2) 的结果是3.1,而不是3.10
print('{:.2f} {:.2f}'.format(x1,x2))
加粗样式print(round(x1,2),round(x2,2)) # round()函数获得的浮点数会自动转为最短表示,例如round(3.10000, 2) 的结果是3.1,而不是3.10,
这个题目套用一下高中的求根公式
10、个税计算器
s = float(input())
# 先判断输入是正数,然后根据输入的工资范围定税率和速算扣除数
if s < 0:
print("error")
else:
salary = s - 5000
if salary <= 0:
fee, num = 0, 0
elif salary <= 3000:
fee, num = 3, 0
elif salary <= 12000:
fee, num = 10, 210
elif salary <= 25000:
fee, num = 20, 1410
elif salary <= 35000:
fee, num = 25, 2660
elif salary <= 55000:
fee, num = 30, 4410
elif salary <= 80000:
fee, num = 35, 7160
else:
fee, num = 45, 15160
tax = abs(salary * fee / 100 - num)
print("应缴税款{:.2f}元,实发工资{:.2f}元。".format(tax, salary + 5000 - tax))
这里用了多重if,elif语句,有了很多分支,清楚结构之后就好做了
11、分期付款计算器
他有两种方式:AC和ACPI,其中AC是需要以一个列表形式输出,ACPI直接输出一个结果就行,这道题主要是要读懂题意,他AC模式,刚开始累计已还款本金是0,以后每期都要乘以期数,这样理解就可以做了。
price,month,mode,rate = float(input()),int(input()),input(),float(input())
if mode == 'AC':
ls = []
for i in range(month):
repayment = price / month + (price - price / month * i) * rate
ls.append(round(repayment,2))
print(ls)
elif mode == 'ACPI':
repayment = price * rate * (1 + rate) ** month /((1 + rate) ** month - 1)
print(round(repayment,2))
else:
print('还款方式输入错误')
12、字符大小写转换
哈哈哈,这里就用到python的函数了,str.islower()判断是不是小写,同样的str.isupper()判断是不是大写,然后str.upper()是转为大写,str.lower()是转为小写。
s = input()
for c in s:
if c.islower():
print(c.upper(), end='')
elif c.isupper():
print(c.lower(), end='')
else:
print(c, end='')
总结
判断类的问题审题要仔细,条件找全基本就可以做了