python学习练习

1.求三角形面积和周长

a,b,c=(int(x) for x in input().split())
if a+b>c and a+c>b and b+c>a:
     s=(a+b+c)/2
     area=(s*(s-a)*(s-b)*(s-c))**0.5
     perimeter=a+b+c
     print("area={:,.2f};perimeter={:,.2f}".format(area,perimeter))
else:
     print("These sides do not correspond to a valid triangle")

注意:格式化输入输出,format和小数点位数

2.为鼓励居民节约用水,自来水公司采取按用水量阶梯式计价的办法,居民应交水费y(元)与月用水量x(吨)相关:当x不超过15吨时,y=4x/3;超过后,y=2.5x−17.5。请编写程序实现水费的计算。

x=int(input())
if x<=15:
     y=(4*x)/3
else:
     y=2.5*x-17.5
print("%.2f"%y)

注意:print()里面小数点控制方法

3.中小学生每个学期都要体检,要量身高,因为身高可以反映孩子的生长状况。现在,一个班的身高已经量好了,请输出其中超过平均身高的那些身高。程序的输入为一行数据,其中以空格分隔,每个数据都是一个正整数。程序要输出那些超过输入的正整数的平均数的输入值,每个数后面有一个空格,输出的顺序和输入的相同。

sum=0
b=[]
a=[int(x) for x in input().split()]
for x in a:
     sum=sum+x
average=sum/len(a)
for x in a:
     if x>average:
          b.append(x)
for value in b:
     print(value,end=" ")

注意:(1)列表的使用(2)一行读入多个数据

4.查找指定字符

find=input()
v=input()
l=list(v)
if find in l:
     print("index={}".format(l.index(find)))
else:
     print("Not Found")

注意:不需要使用循环,要善于使用python自带的一些函数。

5.输入一个字符串,再输入两个字符,求这两个字符在字符串中的索引。输入:第一行输入字符串,第二行输入两个字符,用空格分开。输出:反向输出字符和索引,即最后一个最先输出。每行一个。

s = input()
a , b = input().split()
la=range(len(s))     #range(0,11)
lb = lista[::-1]     #字符串反转
for i in lb:
    if s[i] == a or s[i] == b:
        print(i,s[i])

6.身份证校验问题。一个合法的身份证号码由17位地区、日期编号和顺序编号加1位校验码组成。校验码的计算规则如下:

首先对前17位数字加权求和,权重分配为:{7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2};然后将计算的和对11取模得到值Z;最后按照以下关系对应Z值与校验码M的值:Z:0 1 2 3 4 5 6 7 8 9 10
M:1 0 X 9 8 7 6 5 4 3 2

a=[7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2]#加权
s=input()#输入身份证字符串
numbers=list(s)
#numbers=[x for x in list(s)]#将身份证的字符串转化为数字
#另一种方法是numbers=list(map(int,list(a))
sum=0
for i in range(0,17):
     c=a[i]*numbers[i]
     sum=sum+c
     value=sum%11#计算得到校验码Z值,身份证后面的是Z对应的M


#判断身份证格式是否正确
z=[0,1,2,3,4,5,6,7,8,9,10]
m=[1,0,'X',9,8,7,6,5,4,3,2]#校验码
mp=dict(zip(m,z))#将mz转化为字典,一一对应


#判断校验码是否正确
if mp.get(value)==numbers[len(numbers)-1]:
     print("校验码正确")

本题没做出来,未完待续。

7.字符串转换。输入在一行中给出一个不超过80个字符且以回车结束的字符串。在一行中输出转换后的整数。题目保证输出不超过长整型范围。如free82jeep5则输出825.

c=[]
answer=''
s=input()
lists=list(s)
numbers=list("0123456789")
for i in range(0,len(lists)):
     if lists[i] in numbers:
          c.append(lists[i])

for j in range(0,len(c)):
	answer=answer+c[j]
          
print(answer)

8.求交错序列前N项和。本题要求编写程序,计算交错序列 1-2/3+3/5-4/7+5/9-6/11+... 的前N项之和。2019.11.16更

n=int(input())
sum=0#初始化
p=0
q=-1
flag=1#控制符号的变化
for i in range(1,n+1):
    p+=1#分子
    q+=2#分母
    sum=sum+p/q*flag
    flag=-flag

print("{:,.3f}".format(sum))#格式化输出

9.产生每位数字相同的n位数。如输入1,5输出11111,输入     3,4输出3333(注意3前面有空格)

number=input()#字符串
s=number.split(',')
n=int(s[1])
print(s[0]*n)

一开始我的代码是这样的,第一个测试集可以通过,到第二个就不行了,后来就学习到了strip()这个函数,问题得以解决,下面两行代码是别人写的。

a,b = input().strip().split(',')
print(a.strip()*int(b))

10.

猜你喜欢

转载自blog.csdn.net/weixin_44961794/article/details/102992224