python练习题1

1.利用for循环求1~100中所有数的和、所有奇数和以及偶数的和。

sum=0
for i in range(1,101):
    sum+=i
sum
sum=0
for i in range(1,101,2):
    sum+=i
Sum
sum=0
for i in range(2,101,2):
    sum+=i
sum

2.输入若干学生成绩(按Q或q结束),如果成绩<0,则重新输入。统计学生人数和平均成绩。

num = 0
score = 0
while True:
    s = input('请输入学生成绩:')
    if (s == 'Q') or (s == 'q'):
        break
    if float(s) < 0:
        print("请重新输入:")
        continue
    num += 1
    score += float(s)
print("班级学生数为:{0},平均分为:{1}".format(num, score / num))

3.显示100~200之间不能被3整除的数,要求一行显示10个数。

n = 0
for i in range(100, 201):
    if i % 3 == 0:
        print(i, end=' ')
        n += 1
        if n % 10 == 0:
            print("\n")

4.编写程序(prime1.py)判断所输入的任意一个正整数是否为素数。

n1 = int(input("请输入一个正整数:"))
n2 = int(n1 / 2)
if n1 < 4:
    if n1==1:
        print("{0}不是素数".format(n1))
    else:
        print("{0}是素数".format(n1))
else:
    for j in range(2, n2 + 1):
        if n1 % j == 0:
            print("{0}不是素数".format(n1))
        break
        if j == n2:
            print("{0}是素数".format(n1))

5.编写程序实现根据考试成绩将成绩分为A,B,C,D,E五档,其中100-90为A档,89-80为B档,79-70为C档,例如69-60为D档,例如59-0为E档(不及格)。

score=float(input("请输入一个0到100之内的数:"))
if score>=90 and score<=100:
    print("A")
elif score>=80:
    print("B")
elif score>=70:
    print("C")
elif score>=60:
    print("D")
else:
    print("E")

6.编写程序,产生两个0—100之间的随机整数a 和b,求这两个整数的最大公约数和最小公倍数。

import random

a = m = random.randint(0, 100)
b = n = random.randint(0, 100)
temp = 0
if a > b:
    while b != 0:
        temp = a % b
        a = b
        b = temp
    x = (m * n) / a
    print("{0},{1}的最大公约数为:{2},最小公倍数为:{3}".format(m, n, a, x))
else:
    while a != 0:
        temp = b % a
        b = a
        a = temp
    x = (m * n) / b
    print("{0},{1}的最大公约数为:{2},最小公倍数为:{3}".format(m, n, b, x))

7.编写程序,输入一元二次方程的三个系数a,b和c, 求ax2+bx+c=0方程的解。考虑解的如下情况:a=0 and b=0 无解;a=0 and b!=0,有一个实根; b2-4ac=0,有两个相等实根;b2-4ac>0,有两个不相等实根。

import math

a = float(input("输入数a:"))
b = float(input("输入数b:"))
c = float(input("输入数c:"))
if a == 0 and b == 0 or b ** 2 - 4 * a * c < 0:
    print("该方程无解!")
elif a == 0 and b != 0:
    print("该方程的解为:{0}".format((-c) / b))
elif b ** 2 - 4 * a * c == 0:
    print("该方程有两个相同的解为{0}".format((-b) / 2 * a))
elif b ** 2 - 4 * a * c > 0:
    x = math.sqrt(b ** 2 - 4 * a * c)
    print("该方程有两个不相同的解为{0},{1}".format((x - b) / 2 * a, (-b - x) / 2 * a))

8.编写程序,输入x,根据如下公式计算分段函数y的值,请分别利用单分支语句、双分支语句以及条件运算表达式语句实现。

import math

x = int(input("请输入一个整数X:"))
if x >= 0:
    y = math.sin(x) + 2 * math.sqrt(x + math.e ** 4) - (x + 1) ** 3
else:
    y = math.log(math.e, -5 * x) - (math.fabs(x ** 2 - 8 * x)) / 7 * x + math.e
print("y={0}".format(y))

9.编写程序,输入三角形的三条边,先判断是否可以构成三角形,如果可以则进一步求三角形的周长和面积,否则报错“无法构成三角形!”。

import math

a = float(input("输入数a:"))
b = float(input("输入数b:"))
c = float(input("输入数c:"))
if a + b > c and a + c > b and b + c > a and a > 0 and b > 0 and c > 0:
    c1 = a + b + c
    p = c1 / 2
    s = math.sqrt(p * (p - a) * (p - b) * (p - c))
    print("该三角形的周长为:{0},面积为:{1}".format(c1, s))
else:
    print("无法构成三角形!")


10.打印1-10之间的整数,但是把2,5,7,8这4个数除外。
for i in range(1,11):
    if i not in [2,5,7,8]:
        print(i,end=" ")

11.用map()函数把 list1 = [13,445,6,65 ‘887’,‘234’,34,‘3455’,‘234’], 变成list2 = [13,445,6,65,887,234,34,3455,234] (把list1中的元素全变成int类型)。

list1 = [13,445,6,65,'887','234',34,'3455','234']
list2=list(map(int,list1))
print(list2)

12.用filter()函数去掉 list1 = [1,2,3,12,34,21,23,12,3] 中的偶数。

def f(x):
    return x%2!=0
list1 = [1, 2, 3, 12, 34, 21, 23, 12, 3]
list2=list(filter(f,list1))
print(list2)

13.假设有若干个学生以及成绩,存放在学生字典westosX中,学生分数在60~100之间,筛选出成绩在90分以上的学生情况。

import random
info={}
for i in range(20):
    name='westos'+str(i)
    score=random.randint(60,100)
    info[name]=score
scoreInfo={}
for name,score in info.items():
    if score>90:
        scoreInfo[name]=score
print(scoreInfo)

14.用reduce()函数求:1+2+…100。

from functools import reduce
x = reduce(lambda a,b:a+b,range(1,101))
print(x)

15.写函数,利用递归获取斐波那契数列中的第10个数,并将该值返回给调用者。

def f(x,x1,x2):
    if x==10:
        return x1
    x3=x1+x2
    a=f(x+1,x2,x3)
    return a
num=f(1,0,1)
print(num)

16.写函数,检查获取列表或元组的对象的所有奇数位索引对应的元素,并将其作为新列表返回给调用者。

def getA(x):
    list2=[]
    j=0
    for i in x:
        j+=1
        if j% 2 != 0:
            list2.append(i)
    return list2

list1 = (1, 3, 4, 5, 6, 7)
print(getA(list1))

17.写函数,计算传入字符串中数字、字母、空格以及其他的字符的个数。

def sumA(s):
    n=0
    m=0
    k=0
    l=0
    for i in s:
        if i.isalpha():#字母
            n+=1
        elif i.isdigit():#数字
            m+=1
        elif i.isspace(): #空格
            k+=1
        else:               #其他
            l+=1
    return "{0}字符串中字母个数为:{1},数字个数为:{2},空格个数为:{3},其他字符为:{4}".format(s,n,m,k,l)
s='abc123 a9#'
print(sumA(s))

18.编写一个函数cacluate, 可以接收任意多个数, 返回的是一个元组.元组的第一个值为所有参数的平均值, 第二个值是大于平均值的所有值。

def cacluate(*x):
    avg=sum(x)/len(x)
    list1=[]
    for i in x:
        if i>avg:
            list1.append(i)
    return avg,list1
a = cacluate(1,2,3,4,5)
print(a,type(a))

19.编写函数, 接收一个列表(包含30个1~100之间的随机整形数)和一 个整形数k, 返回一个新列表。函数需求:

  • 将列表下标k之前对应(不包含k)的元素按升序排列;
  • 将下标k及之后的元素按降序排列;
import random

list1 = []
for i in range(30):
    list1.append(random.randint(1, 100))


def sart(alist, k):
    list2 = []
    list3 = []
    for j in range(len(alist)):
        if k > j:
            list2.append(alist[j])
        else:
            list3.append(alist[j])
    list2.sort()
    list3.sort(reverse=True)
    return list2 + list3


print(sart(list1, 10))

20.编写一个程序来计算输入中单词的频率。 按字母顺序对键进行排序后输出。
假设为程序提供了以下输入:New to Python or choosing between Python 2 and Python 3? Read Python 2 or Python 3.

import re

strs='New to Python or choosing between Python 2 and Python 3? Read Python 2 or Python 3.'
result = re.sub('\W+', ' ', strs).replace("_", ' ')
resultList=result.split()
resultNum=[]
for i in resultList:
    resultNum.append(resultList.count(i))
d=dict(zip(resultList,resultNum))
print(d)
上一篇:day7-字典作业


下一篇:day6 - homework - 列表作业2