每天更新10道题
a=input()
fuhao=a[:1:]
str=a[1::]
num=int(str,10)
if fuhao=='$':
#*7
num=num*7
print("¥{:.2f}".format(num))
elif fuhao=='¥':
num=num/7
print("${:.2f}".format(num))
else:
print("输入格式错误")
把符号和数字分开储存,然后判断符号运算获取换算后的货币符号以及数值
import math
num=eval(input())
for i in range(num):
a,b,c=map(int,input().split())
Cos_A=(b*b+c*c-a*a)/(2*b*c)
S=(b*c*math.sqrt(1.0-Cos_A*Cos_A))/2
print("{:.0f}".format(S))
用三角形面积公式:
import math
num=eval(input())
for i in range(num):
sum=0.0
x=eval(input())
if x>=401:
sum+=(x-400)*0.5663
x=400
if x>=151:
sum += (x - 150) * 0.4663
x=150
if x>0:
sum+=x*0.4463
print("{:.2f}".format(sum))
自上到下来写,代替switch语句
a,b=map(int,input().split())
if b<=a:
print("Congratulations, you are within the speed limit!")
else:
if b-a>30:
num=500
elif b-a>20:
num=270
else:
num=100
print("You are speeding and your fine is {}.".format(num))
使用map来转换列表数值类型、结构赋值、分割函数
while True:
try:
a, b = map(int, input().split())
if a>0:
if b>0:
num=1
else:
num=4
else:
if b>0:
num=2
else:
num=3
print(num)
except:
break
多组输入的语法
x=eval(input())
if x<=15:
y=4*x/3
else:
y=2.5*x-17.5
print("{:.2f}".format(y))
while True:
try:
a=int(input(),10)
if (a%4==0 and a%100!=0) or a%400==0:
print("闰年")
else:
print("平年")
except:
break
n=int(input(),10)
if n==0 or n==1:
print("%d indian boy."%(n))
else:
print("%d indian boys." % (n))
a=int(input(),10)
b=int(input(),10)
if a<=b:
print("未超速")
elif (a-b)/b<=0.1:
print("超速警告")
elif (a-b)/b<=0.2:
print("罚款100元")
elif (a-b)/b<=0.5:
print("罚款500元")
elif (a-b)/b<=1:
print("罚款1000元")
else:
print("罚款2000元")
多行数据用多个input()
a, b = map(float, input().split(','))
if a > 0:
if b > 0:
num = 1
else:
num = 4
else:
if b > 0:
num = 2
else:
num = 3
print("第{}象限".format(num))
7-11 骑车还是走路?
实际上这题你可以算出来在x=100m的时候两种方式时间相同,
大于这个路程单车快
小于这个路程走路快
x=eval(input())
if x>100:
print("Bike")
elif x==100:
print("All")
else:
print("Walk")
7-12 虫子吃苹果
n,x,y=map(int,input().split(','))
num=y//x
if y%x!=0:
num=num+1
print(n-num)
7-13 打印数字矩形
n=input()
num=int(n,10)
def fun(n):
str1=""
small=str(n)
for i in range(n):
if i!=0 and i!= n-1:
str1+=" "
else:
str1+=small
return str1
for i in range (num):
str2=""
if i!=0 and i!=num-1:
str2 = fun(num)
else:
str2 = n * num
print(str2)
我们可以发现该矩阵有两种规律
1.在第一行和最后一行全部打印数字
2.在中间行只打印两边两个数字
于是我们写一个构造中间行的矩阵函数就可以了
7-14 统计字符串中不同种类的字符个数
str1=input()
letters=0
digits=0
spaces=0
others=0
len_str=len(str1)
for i in range(len_str):
if str1[i].isalpha()==True:
letters+=1
elif str1[i].isdigit()==True:
digits+=1
elif str1[i].isspace()==True:
spaces+=1
else:
others+=1
print("letters={},digits={},spaces={},others={}".format(letters,digits,spaces,others))
学会使用字符串值类型判断函数就行了,
注意是属于字符串的函数哦!!!
7-15 正整数的奇偶性判定
a=int(input(),10)
if (a&1)==0:
print("{}是偶数".format(a))
else:
print("{}是奇数".format(a))
用的位运算,比取余更快
7-16 找完数(Python版)
ccccccccccccccccccccccccc
这个得重点讲一下,并不是我屎山写的长,而是我找到以前别人博客,才发现代码可以那么简洁
先贴上我的代码
#判断是否是完数的函数
def fun(num):
sum = 0
for i in range(num):
if i==0 :
continue
else:
if num%i==0:
sum+=i
if sum==num:
return True
#print(sum,num)
return False
#打印函数
def printf(n):
count=0
print("{} =".format(n),end="")
#打印这个完数
#count1=0
for i in range(n):
if i==0:
continue
if n%i==0:
if count!=0:
print(" +",end="")
print(" {}".format(i), end="")
count += 1
#找因子打印
print("")#补上一个换行
#正文部分
a,b=map(int,input().split())
b+=1
f=False
for i in range(a,b):
if fun(i)==True:
printf(i)
f=True
#print(i)
else:
continue
if f==False:
print("None")
下面是大佬的代码:
链接
#By yangbo 2020.8.06
import math #使用这个库的话,可以减少时间
flag = 0 #没有完数 的标志位
m,n = map(int,input().split())
for i in range (m,n+1): #[m,n]闭区间内
s = [1] #
if i % 2 == 0:#观察完数,我们会发现:完数都是偶数。这行代码对大数据可以缩短1/3的时间
for j in range (2,int(math.sqrt(i) +1)):# int(i**0.5 +1)
if i%j ==0: #比如i=28,j=2
s.append(j)#因子2入选
s.append(i//j)#除1外,因子是成对出现的,28//2 == 14 的,也是因子
if sum(s) == i:#来判断,如果i所有的因子之和为i 则这个就是我们找的完数
s.sort()
print ('{:d} = '.format(i),end="")
print(' + '.join(map(str,s)))
flag=1
if(flag == 0):
print("None")
我们来看看该怎么优化自己的代码
1.学会调用库函数
库函数的sqrt()函数会比**0.5会更快,这应该是底层原理的原因,有待以后翻开函数底层才能解决这个问题了
2.学会观察
如果不是这位老哥,我根本就没发现完数都是偶数orz
还有,因子是成对出现,所以可以只遍历一半,然后吧另一半的因子算出来加入列表,最后拍个序就行了,wc
3.优化打包
学会利用“”.join()来打印分隔符,这个列表是python的一个很好的工具
我写的那么长的printf()函数,实际上只需要两行
这种算法题是真的666
7-17 jmu-python-判断是否构成三角形
a,b,c=map(int,input().split())
if (a+b)>c and (a+c)>b and (c+b)>a:
print("yes")
else:
print("no")
任意两边之和大于第三边
7-18 jmu-python-凯撒密码加密算法
str1=input()
num=int(input())
for i in str1:
if i.isalpha()==True:
t=ord(i)
t+=num
if chr(t).isalpha()==False:
t-=26
print(chr(t),end="")
else:
print(i,end="")
char---int----char
7-19 奖金计算,循环与多分支
x=eval(input())
sum=0.0
if x>1000000:
sum+=(x-1000000)*0.01
x=1000000
if x>600000:
sum+=(x-600000)*0.015
x=600000
if x>400000:
sum+=(x-400000)*0.03
x=400000
if x>200000:
sum+=(x-200000)*0.05
x=200000
if x>100000:
sum+=(x-100000)*0.075
x=100000
sum+=x*0.1
print("{:.2f}".format(sum))
7-20 本题要求两个给定正整数的最大公约数和最小公倍数
def gcd(x,y):
if y==0:
return x
elif x>=y:
return gcd(y,x%y)
else:
return gcd(x,y%x)
#没有三目运算符,只能这样写了
a=int(input())
b=int(input())
print("{} {:.0f}".format(gcd(a,b),a*b/gcd(a,b)))
7-21 企业根据利润提成发放奖金问题
x=eval(input())
sum=0.0
if x>1000000:
sum+=(x-1000000)*0.01
x=1000000
if x>600000:
sum+=(x-600000)*0.015
x=600000
if x>400000:
sum+=(x-400000)*0.03
x=400000
if x>200000:
sum+=(x-200000)*0.05
x=200000
if x>100000:
sum+=(x-100000)*0.075
x=100000
if x>=0:
sum+=x*0.1
print("{:.1f}".format(sum))
else:
print("0")
一个很坑的点是不大于0的利润都直接打印输出0而不保留小数(题目没有说明)
7-22 JMU-Python-分段函数
import math
from math import e
x=input()
y=0
if x.isalpha():
print("Input Error")
else:
a=float(x)
if a>0:
y=math.cos(a)+pow(e,a)
elif a<=0:
y=0
print("f(%.2f) = %.2f"%(a,y))
7-23 JMU-Python-分段函数
import math
x=input()
y=0
if x.isalpha():
print("Input Error")
else:
a=eval(x)
if a>0:
y=math.sqrt(a)+math.log(a,math.e)
elif a<=0:
y=0
print("f(%.2f) = %.2f"%(a,y))
7-24 JMU-Python-分段函数
import math
x=eval(input())
ans=0.0
if x>3.5:
ans=math.cos(x)+math.exp(x)
elif 0
7-25 JMU-Python-分段函数
import math
x=eval(input())
ans=0.0
if x>=3:
ans=math.exp(x)+math.sqrt(x)
elif 0
几个大水题
值得注意的是形如log2(3)这样的对数 可以使用
math.log(3,2)
来进行表达
7-26 昨天
time=[0,31,28,31,30,31,30,31,31,30,31,30,31]
def isrun(year):
if (year%4==0 and year%100!=0) or year%400==0:
return True
return False
n=int(input())
for i in range(n):
a,b,c=map(int,input().split('-'))
f=isrun((a))
if c==1:
b -= 1
if b==0:
b+=12
a-=1
c=time[b]
if b==2 and f==True:
c+=1
else:
c=c-1
##########
print("%d-%02d-%02d" % (a, b, c))
先打表,写出每个月的天数,从下标为1开始
然后对天数进行-1,然后维护日期并输出
7-27 胜者
while True:
try:
n=int(input(),10)
sum1=0
sum2=0
for i in range(n):
#为什么把sum放到这里pycharm不会报错???
a,b=map(int,input().split())
if a>b:
sum1+=1
elif a sum2:
print("Sg")
elif sum1 < sum2:
print("Gs")
else:
print("CONTINUE")
except:
break
7-28 小游戏
n = int(input(), 10)
for i in range(n):
#a=int(input(), 10)
a = input().split()
t=0
for i in a:
t+=int(i)
t-=int(a[0])
# print(t)
if (t % 3 == 0) and (t % 5 == 0) and (t % 7 == 0):
print("YES")
else:
print("NO")
对于一列有两种数据信息的,python的列表不好处理
所以我们根据题目特点对列表求和减去第一个数据,就得到了后面的求和
然后判断是否满足条件
7-29 JMU-Python-成绩判断
a,b=map(int,input().split(","))
if a<60 or b<60:
print("不合格")
else:
if (a+b)/2>=90:
print("成绩优秀")
else:
print("通过")
7-30 成绩转换
f='E'
while True:
try:
a=int(input(),10)
if a<0 or a>100:
print("error!")
else:
if a<60:
f="E"
elif a<70:
f="D"
elif a<80:
f="C"
elif a<90:
f="B"
else:
f="A"
print(f)
except:
break
7-31 求某月的天数
####1##2##3##4##5##6##7##8##9##10##11##12
a1=[31,28,31,30,31,30,31,31,30,31,30,31]
a2=[31,29,31,30,31,30,31,31,30,31,30,31]
while True:
try:
a,b=map(int,input().split())
if (a%4==0 and a%100!=0) or a%400==0:
print(a2[b-1])
else:
print(a1[b-1])
except:
break
也可以只用a1一个表
判断闰年以及是否为二月,如果是则把输出+1
7-32 找出肇事者,循环与布尔逻辑
n=eval(input())
l=pow(10,n-1)
r=pow(10,n)-1
for i in range(l,r):
t=i//pow(10,(n-2))
f1=t//10
f2=t%10
f3=i//10%10
f4=i%10
if (f1==f2) and ((f4%2)==1) and ((f3+f4)==5) and ((i%3)==0):
#print("{} {} {} {} {}".format(t,f1,f2,f3,f4))
print(i)
和韩信点兵一样,我愿称之为韩信点兵plus!!!
7-33 把字符串中十六进制字符转换成十进制整数
def ishex(c):
if 48<=ord(c)<=48+9 or 97<=ord(c)<=97+5:
return True
return False
f_fuhao=False
str1=input()
str1=str1.lower()
str2=""
for i in str1:
if ishex(i):
str2+=i
if i=="-":
f_fuhao=True
#print(str2)
if str2!="":
ans = int(str2, 16)
if f_fuhao == True:
ans = -ans
if ans != 0:
print(ans)
else:
print("0")
else:
pass
7-34 求某一范围内的水仙花数
a,b=map(int,input().split())
b+=1
for i in range(a,b):
if i <100:
continue
if i>999:
break
t1=i//100
t2=i//10%10
t3=i%10
if t1*t1*t1+t2*t2*t2+t3*t3*t3==i:
print(i)
7-35 不按常理出牌的列表
v = list(eval(input()))
print("before:",v)
for x in range(len(v)-1,-1,-1):
#将一个列表反向读取防止pop()根据List特性自动填补导致读取位置错误
#这样写x代表在列表v当中的下标
cnt = v.count(v[x])
#计算当前元素的个数,不唯一删除掉最前面第一个
if cnt >= 2:
index=v.index(v[x])
v.pop(index)
#不唯一删除掉最前面第一个
#方法:使用倒置读取避免pop()读取的问题
print("after:",v)
7-36 jmu-python-汇率兑换
a=input()
fuhao=a[:1:]
str=a[1::]
num=int(str,10)
if fuhao=='$':
#*7
num=num*6
print("R{:.2f}".format(num))
elif fuhao=='R':
num=num/6
print("${:.2f}".format(num))
else:
print("输入格式错误")
7-38 jmu-python-分段函数
import math
x=eval(input())
ans=0.0
if x<3:
ans=1.2
elif x==3:
ans=10
else :
ans=2*x+1
print("f({:.2f})={:.2f}".format(x,ans))
7-40 jmu-python-分段函数&数学函数
import math
x=eval(input())
ans=0.0
if abs(x)<1:
ans=math.sqrt(2-2*x)
elif x>=1:
ans=(math.cos(x)+x*x)/(2.5+abs(x+math.log(100,math.e)))
else :
ans=math.exp(x)
print("f({:.3f})={:.3f}".format(x,ans))
7-41 计算表达式(*,//, %)
a,b,c=input().split()
a=int(a,10)
c=int(c,10)
if b=='*' or b==r'//' or b=='%':
if b=='*':
print("{0}*{1}={2}".format(a,c,a*c))
if b==r'//':
print(r"{}//{}={}".format(a, c, a // c))
if b=='%':
print(r"{}%{}={}".format(a, c, a%c))
else:
print("Invalid operator")