• python 习题


    import pandas as pd
    df = pd.read_excel('E://data//朝阳医院2018年销售数据.xlsx')
    df.head()    #打印前五行
    df.shape      #有多少行,多少列
    df.dtypes    #查看每列的数据类型
    colNameDict = {'购药时间':'销售时间'}
    #列名重命名
    df.rename(columns = colNameDict,inplace=True)  #将购药时间改为销售时间 inplace=true表示不创建新的对象直接对原有的数据进行更改,false表示创建新的数据对象
    df.head()
    
    
    #缺失值的处理
    print('删除缺失值前的大小',df.shape)
    df=df.dropna(subset=['销售时间','社保卡号'],how='any')   #删除列(销售时间,社保卡号)中为空的行,其中how='any'意思为给定列中任何一个有空值就删除行
    print('删除缺失值后的大小',df.shape)
    
    #数据类型的转换
    df['销售数量']=df['销售数量'].astype('float')
    df['应收金额']=df['应收金额'].astype('float')
    df['社保卡号']=df['社保卡号'].astype('ocject')
    ##修改日期
    def splitsaletime(timeColser):
        timelist=[]
        for value in timeColser:          #例如2018-01-01 星期五 ,分割后为:2018-01-01
            dateStr = value.split(' ')[0]
            timelist.append(dateStr)
        timeSer= pd.Series(timelist)    #将列表转行为一维数据series类型
        return timeSer
    
    ##输入:timecolser--销售时间这一列,是个series数据类型
    ##输出:分割后的时间,返回也是这个数据类型
    
    timeSer= df.loc[:,'销售时间']  #获取销售时间这一列
    dateSer = splitsaletime(timeSer)  #对字符串进行分割,获取销售日期
    
    df.loc[:,'销售时间']=dateSer   #修改销售时间这一列的值
    df.head()
    
    #字符串转换日期
    
    df.loc[:,'销售时间']= pd.to_datetime(df.loc[:,'销售时间'],format='%Y-%m-%d',errors='coerce')
    df.dtypes
    
    
    df=df.dropna(subset=['销售时间','社保卡号'],how='any')
    
    
    ##数据排序
    #### 使用pd.sort.values方法进行排序,by表示按照那一列进行排序,ascending=true时表示升序排列,false表示降序排列
    print('排序前的数据')
    df.head()
    df=df.sort_values(by='销售时间',ascending=True)
    print('排序后的数据')
    df.head()
    
    ##排序后的行号乱了,,需要进行重新的排序
    df= df.reset_index(drop=True)
    df.head()
    
    
    ##异常值的处理,,首先我用describe()方法查看数据框中所有数据每列的描述统计信息、
    df.dedscribe()   #从结果可以看出销售数量有负值出现,,可能是记录错误,删除
    
    #删除通过条件判断删除
    
    queryser=df.loc[:,'销售数量']>0   #设置查询条件
    print('删除异常值之前',df.shape)
    df= df.loc[queryser,:]        #条件的应用
    print('删除异常值之后',df.shape)
    
    ##       构建模型
    #### 计算第一个指标,月均消费次数=总消费次数/月份数,,,,如果同一天所有消费算一次同一个人,销售时间和社区卡号
    kpi_df = df.drop_duplicates(
        subset=['销售时间','社区卡号']
    )            #删除重复的数据
    
    totali = kpi_df.shape[0]   #总消费的次数,,,总共的行数
    print('消费次数:',totali)
    
    # In[]
    # -----------------------------------------------------------------------
    # 北京出租车计价:
    # 收费标准:
    # 3公里以内收费13元
    # 基本单价: 2.3元 / 公里(超出3公里以外)
    # 空驶费: 超过15公里后,每公里加收单价的50 % 的空驶费(即3.45元 / 公里)
    # 要求:输入公里数,打印出费用金额(以元为单位四舍五入)
    
    
    km = int(input("请输入公里数:"))
    money=0
    def juli(km):
        if km>=0 and km <=3:
            print("你需要支付:13元")
        elif km>3 and km <=15:
            feiyong =13+2.3*(km-3)
            print("你需要支付:",feiyong)
        else:
            feiyong = 13+2.3*(km-3)+2.3*0.5*(km-15)
            print("你需要支付:",feiyong)
    
    juli(km)
    
    # In[]
    # -------------------------------------------------------------
    # 2. 输入一个学生的三科成绩(三个整数):
    #   打印出最高分是多少?
    #   打印出最低分是多少?
    #   打印出平均分是多少?
    
    import numpy as np
    a = float(input("请输入第一科成绩:"))
    b = float(input("请输入第二科成绩:"))
    c = float(input("请输入第三科成绩:"))
    x=max(a,b,c)
    print("最高成绩是:",x)
    y=min(a,b,c)
    print("最低成绩是:",y)
    m = np.average(np.array([a,b,c]))
    print("平均分是: ",m)
    
    zuida = a  #假设A最大
    if b>zuida:
        zuida = b
    if c>zuida:
        zuida=c
    print(zuida)
    
    # In[]
    # ----------------------------------------------------------------
    # 3、 BMI指数(Body Mass Index) 以称身体质量指数
    #      BMI值计算公式:
    #         BMI = 体重(公斤) / 身高的平方(米)
    #      例如:
    #        一个人69公斤,身高是173公分
    #        BMI = 69 / 1.73**2 = 23.05
    #     标准表:
    #       BMI < 18.5   体重过轻
    #       18.5 <= BMI < 24 体重正常
    #       BMI > 24  体重过重
    #     要求: 输入身高的体重,打印出BMI的值并打印体重状况
    for i in range(3):
        x = float(input("请输入身高(米):"))
        y = float(input("请输入体重(公斤):"))
        BMI = y/(x**2)
        print("BMI指数为:",BMI)
        if BMI<18.5 and BMI>0:
            print("体重过轻")
        elif BMI>=18.5 and BMI<=24:
            print("体重正常")
        elif BMI>24:
            print("体重过重")
        else:
            print("你的输入有误")
    # In[]
    # ----------------------------------------------------------
    # 2. 输入一年中的月份(1~12) 输出这个月在哪儿
    # 个季度,如果输入的是其它数,则提示您输错了
    
    # 函数形式
    def time(a):
    
        if a >=1 and a <= 12:
            if a <=3:
                print("春季")
            elif a <=6:
                print("夏季")
            elif a <=9:
                print("秋季")
            else:
                print("冬季")
        else:
            print("你输入有误:")
            
            return a
    time(2)
    
    # for 循环写出
    for i in range(3):
        a = int(input("请输入月份:"))
        if a >=1 and a <= 12:
            if a <=3:
                print("春季")
            elif a <=6:
                print("夏季")
            elif a <=9:
                print("秋季")
            else:
                print("冬季")
        else:
            print("你输入有误:")
    # In[]
    # ------------------------------------------------------------------
    # 3. 分三次输入当前的小时,分钟和秒数,在终端
    # 打印时此距离凌晨0:0:0 秒过了多少秒
            
    # 函数解析
    def fun1(xiaoshi,fenzhong,miaoshu):
        s = xiaoshi*60*60+fenzhong*60+miaoshu
        print("你现在距离0:0:0经过了",s,"秒")
    fun1(2,30,4)
    
    
    # for循环解析
    xiaoshi = int(input("请输入小时:"))
    fenzhong = int(input("请输入分钟:"))
    miaoshu = int(input("请输入秒数:"))
    s = xiaoshi*60*60+fenzhong*60+miaoshu
    print("你现在距离0:0:0经过了",s,"秒")
    # In[]
    
    # -----------------------------------------------------
    # 2. 输入任意一个字符串,判断这个字符串是否是回文
    #   回文示例:
    #     上海自来水来自海上
    #     ABCCBA
    #     12321
    #   (回文是指中心对称的文字)
    # ---------------------------------------------------
    
    for i in range(3):   # 控制下面这段代码的执行次数,目前为连续执行三次
        s = input("请输入文字: ")
        # 反转字符串s
        r = s[::-1]     ##将数据转换,例如:s=123789   r=987321
        if s == r:
            print(s, "是回文")
        else:
            print(s, "不是回文")
    # In[]
    # ------------------------------------------------
    # 题目:有1题目:有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?
    # 都是多少?、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?
    L = []
    for i in range(1,5):
        for j in range(1,5):
            for k in range(1,5):
                if (i!=j) and (i!=k) and (j!=k):
                    s = "{}{}{}".format(i,j,k)  # s = "%d%d%d"%(i,j,k)
                    L.append(int(s))
    print(L)
    print("总共组成了%d种"%len(L))
    
    
    # In[]
    # ---------------------------------------------------------
    # 题目:企业发放的奖金根据利润提成。利润(I)低于或等于10万元时,奖金可提10%
    # ;利润高于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,
    # 可可提成7.5%;20万到40万之间时,高于20万元的部分,可提成5%;40万到60万之间时高于40万元的部分,
    # 可提成3%;60万到100万之间时,高于60万元的部分,可提成1.5%,高于100万元时,超过100万元的部分按1%提成,
    # 从键盘输入当月利润I,求应发放奖金总数?
    
    jianjing1 = 100000*0.01
    jianjing2 = jianjing1+100000*0.075
    jianjing3 = jianjing2+200000*0.05
    jianjing4 = jianjing3+200000*0.03
    jianjing5 = jianjing4+400000*0.015
    
    x=0
    while x<3:
        lirun = int(input("请输入本月利润:"))
        if lirun <= 100000:
            jianjing=lirun*0.01
            print('奖金为', jianjing,'元')
            break
        elif lirun<=200000:
            jianjing = jianjing1+(lirun-100000)*0.075
            print('奖金为', jianjing,'元')
            break
        elif lirun<=400000:
            jianjing = jianjing2+(lirun-200000)*0.05
            print('奖金为', jianjing,'元')
            break
        elif lirun<=600000:
            jianjing = jianjing3+(lirun-400000)*0.03
            print('奖金为', jianjing,'元')
            break
        elif lirun<=1000000:
            jianjing = jianjing4+(lirun-600000)*0.015
            print('奖金为', jianjing,'元')
            break
        elif lirun>1000000:
            jianjing = jianjing5+(lirun-1000000)*0.01
            print('奖金为', jianjing,'元')
            break
        else:
            print('你的输入有误,请重新输入。。。')
        x = x + 1
    # In[]
    # --------------------------------------------------------------------------------------------------------------
    # 题目:一个整数,它加上100后是一个完全平方数,再加上268又是一个完全平方数,
    # 请问该数是多少?如果一个正整数 a 是某一个整数 b 的平方,那么这个正整数 a 
    # 叫做完全平方数。零也可称为完全平方数。
    # main()
    # {
    # long int i,x,y,z;
    # for (i=1;i<100000;i++):
    #     {x=sqrt(i+100);   /*x为加上100后开方后的结果*/
    #   y=sqrt(i+268);   /*y为再加上268后开方后的结果*/
    #    if(x*x==i+100&&y*y==i+268)/*如果一个数的平方根的平方等于该数,这说明此数是完全平方数*/
    #     printf("
    %ld
    ",i);    /*
    是换行的意思,%ld是长整型*/
    #  }
    # }
    
    import math
    for i in range(10000):
        #转化为整型值
        x = int(math.sqrt(i + 100))
        y = int(math.sqrt(i + 268))
        if(x * x == i + 100) and (y * y == i + 268):
            print(i)
    
    # In[]
    # -------------------------------------------------------------------------------------------------------------
    # 题目:输入某年某月某日,判断这一天是这一年的第几天?
    year = int(input('请输入年份:
    '))
    month = int(input('请输入月份:
    '))
    day = int(input('请输入天:
    '))
    
    #  分别为每年一月至十一月的天数相加和,因为进入12月开始就按天加,所以此处没有加至12月,只加到了11月末
    #   此部分为按月累加
    months = (0,31,59,90,120,151,181,212,243,273,304,334)
    if 0 <= month <= 12:
        sum = months[month - 1]
    else:
        print ('data error')
    
    #  加天数
    sum += day     # /*sum = sum + day*/
    leap = 0
    if (year % 400 == 0) or ((year % 4 == 0) and (year % 100 != 0)):
        leap = 1
    if (leap == 1) and (month > 2):
        sum += 1
    print ('距离本年初已经经过%d天' % sum)
    
    
    # In[]
    #  --------------------------------------------------------------------------------------------------------
    #  写出九九乘法表的效果
    
    for  m in range(1,10):
        for n in range(1,10):
            if m>=n:                                  #  控制跳转行的,当m>n时进入m的下一次循环,,为了呈现出下三角的形状
                print('%s×%s=%s'%(n,m,m*n),end=' ')    #   end = ' '  表示去除自动换行,让数据呈现一行     其中的%s为占位符,表示将得到值插入所占的位置
        print()                                         #   让for n in range(1,10) 循环一次结束换行一次
    
    
    
    i = 1          
    while i <= 9:  #控制行的循环
        j = 1
        while j <=i:   # 控制列的循环
            print("{}*{}={}".format(j,i,j*i),end='	')
            j += 1
        i += 1
        print('')
    # In[]
    # ---------------------------------------------------------------------------
    #  1到100求和
    x = 0
    for i in range(1,101):
        x = x+1
    # 第二种方法
    sum(range(1,101))
    
    # In[]
    #  ------------------------------------------------------------------
    # 用代码实现,输入三个值使得从小到大的顺序输出
    # -------------------------------------------------------------------
    
    data = []
    for i in range(1,4):      # 控制循环的次数,使得你有三次输入的机会
        x = int(input('请输入第%d个数值:
    '%(i)))
        data.append(x)       # 将输入的值存放到建立好的列表中
    data.sort()      # 对列表的数据进行从小大打的排序
    print(data)
    
    # In[]
    # ----------------------------------------------------------
    # 用*打印出来一个P的形状
    # ----------------------------------------------------------
    
    print ('*' * 10)
    for i in range(5):
        print ('*        *')
    print ('*' * 10)
    print ('*
    ' * 6)
    
    # In[]
    #  -------------------------------------------------------------------
    #题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,
    # 小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每
    # 个月的兔子总数为多少?
    
    # -------------------------------------------------------------------
    f1 = 1
    f2 = 1
    for i in range(1,13):
        print ('%12d %12d' % (f1,f2))
        if (i % 2) == 0:
            print ('
    ')
        f1 = f1 + f2
        f2 = f1 + f2
        
    # In[]
    #  -------------------------------------------------------
    #  计算在101到201之间有多少个素数
    
    
    h = 0
    leap = 1
    from math import sqrt
    for m in range(101,201):
        k = int(sqrt(m + 1))
        for i in range(2,k + 1):
            if m % i == 0:
                leap = 0
                break
        if leap == 1:
            print ('%-4d' % m)
            h += 1
            if h % 10 == 0:
                print ('
    ')
        leap = 1
    print ('素数有 %d 个' % h)
    
    # In[]
    # ---------------------------------
    #  创建列表将最大值所对应的索引打印出来
    # ----------------------------------
    import numpy as np
    a = [2,4,7,10,10,10,12,12,14,15]
    x = np.argmax(a)
    
    # In[]
    
    """
    输入M和N计算C(M,N)
    """
    
    m = int(input('m = '))
    n = int(input('n = '))
    fm = 1
    for num in range(1, m + 1):
        fm =fm * num
    fn = 1
    for num in range(1, n + 1):
        fn = fn * num
    fmn = 1
    for num in range(1, m - n + 1):
        fmn = fmn * num
    print()
    print(fm // fn // fmn)  # 计算 C(m,n)
    
    print(fm//fmn)    # 计算 A(m,n)
    
    
    
    
    # In[]
    # 编函数实现阶乘的计算
    
    def f(num):
           chushi = 1
           for num in range(1,num+1):
                  chushi = chushi * num
           print(chushi)
    
    from math import factorial
    factorial(5)
    
    # In[]
              
    # ----------------------------------------------------------
    # 计算出列表中的每一个元素所出现的次数
    # -----------------------------------------------------------
    list1 = [1,2.1,1,3,2.1,1,2.1,2.1]
    
    set1 = set(list1)    #  集合有元素不允许出现重复值,则将列表转换为集合有去重的效果
    
    for item in set1:       #  取出集合中的每一个元素
      # 对列表中的每一个数进行遍历计数
            print(str(item) , ":" , str(list1.count(item)) , "次")  
            # print(str(item) + ":" + str(list1.count(item)) + "次")  # 加号和逗号的效果一样
            
    
    # ---------------------------------------------------------
    # 函数的递归
    # ----------------------------------------------------------
    def shuju(n):     # 函数定义
        if n == 1:
            return 1
        else:
            return 2*shuju(n-1)    # 进行递归,第一次传输为4--f(3);3--f(2);2--f(1)然后f(2)=2往回传输
            
    # ----------------------------------------------------------------
    # numpy模块学习
    # -----------------------------------------------------------------
    import numpy as np
    t1 = np.arange(12)
    t1
    t1.shape       
            
    t2 = np.array([[1,2,3],[4,5,6]])   
    t2
    
    t2.shape        
            
    # In[]
        
    # 输入你的年龄,输出你出生年
    
    import time
    a = int(input("请输入你的年龄:"))
    def fun(a):
        b = time.strftime('%Y',time.localtime(time.time()))
        c = int(b)
        age = c-a
        print("你的出生年是:%d年"% age)
    fun(a)
    
    
    # In[]  
    # 输入三个整数,输出最大值和最小值
    def zz(a,b,c):
        a = int(input("请输入一个整数:"))
        b = int(input("请输入一个整数:"))
        c = int(input("请输入一个整数:"))
        L = [a,b,c]
        print("最大值是:",max(L))
        print("最小值是:",min(L))
        return L
    zz(123,23,23)
    # In[]
    # 编写函数,输入三个点的坐标,判断是否能构成三角形,如果能并计算前两个点所在的直线方程    
    def san(x1, y1, x2, y2, x3, y3):
        c = float(((x1-x2)**2+(y1-y2)**2)**0.5)
        m = float(((x1-x3)**2+(y1-y3)**2)**0.5)
        n = float(((x3-x2)**2+(y3-y2)**2)**0.5)
        if (c+m)>n and (a+n)>m and (m+n)>c:
            if x1 == x2:
                print("直线的方程为: y = x")
            else:
                k = (y2-y1)/(x2-x1)
                print("直线的方程为:y={}x+b".format(k))
            print("三点能构成三角形")
        else:
            print("不能构成三角形")        
    # In[]        
    # 输入两个点的坐标,计算所构成的直线方程
            
    x1 = float(input("请输入第一个点的横坐标:"))
    y1 = float(input("请输入第一个点的纵坐标:"))
    x2 = float(input("请输入第二个点的横坐标:"))
    y2 = float(input("请输入第二个点的纵坐标:"))
    def line(x1,y1,x2,y2):
        if x1 == x2:
            print("直线的方程为: x = {}".format(x1))
        elif y1 == y2:
            print("直线方程为: y = {}".format(y1))
        else:
            k = (y2-y1)/(x2-x1)
            b = y1-k*x1
            print("直线的方程为:y=%s x + (%s)"%(k,b))
    line(x1, y1, x2, y2)
    
    
    # In[]
    
    # 题目:利用条件运算符的嵌套来完成此题:学习成绩>=90分的同学用A表示,60-89分
    # 之间的用B表示,60分以下的用C表示。
    
    a = float(input("请输入你的成绩:"))
    if  a >= 90 :
        print('你的成绩为:%d'%a)
        print('你的等级是:A')
    elif  a > 60 and a<89:
        print('你的成绩为:%d'%a)
        print('你的等级是:B')
    else:
        print('你的成绩为:%d'%a)
        print('你的等级是:B')
        
    # In[]    
    # 题目:输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。
        
    s = input('input a string:')
    字母 = 0
    空格 = 0
    数字 = 0
    字符 = 0
    for c in s:
        if c.isalpha():  # 如果有字母存在,则返回1,否则返回0
            字母 += 1
        elif c.isspace():  # 如果有空格存在则返回1 ,否则返回0 
            空格 += 1
        elif c.isdigit():  # 如果有数字   1   否则 0
            数字 += 1
        else:
            字符 += 1    
    print ('字母 = %d,空格 = %d,数字 = %d,字符 = %d' % (字母,空格,数字,字符))
    
    # In[]
    # 写程序,创建用户名,如果存在输出用户名已经存在,如果不存在输出注册成功,,,
    # 并将注册成功的用户名存入原来的列表中,,总共有两次注册的机会
    
    current_users = ['sas','python','tablue','power','Excel']
    for i in range(2):
        用户名 = input("请输入用户名:")
        a = [user.lower() for user in current_users]
        if 用户名.lower() in a:
            print("该用户名已经被使用")
            print()
            print("如下用户名已经被注册:",current_users)
        else:
            print("注册成功")
            current_users.append(用户名)
    
    
    # In[]
    
    salary=int(input("请输入您的工资:")) #提示输入工资
    buy_ed_list = []  #  把已经买的东西记录到这个列表里
    goods_information='''
    ----------------------------------------------商品清单----------------------------------------
    serial_number :                         name:                             price:
                  1                             iphone6s                            5800
                  2                             mac book                            9000
                  3                             coffee                              32
                  4                             python book                         80
                  5                             bicyle                              1500
    ----------------------------------------------------------------------------------------------
    '''#商品的信息,包括编号、名称、价格
    if  salary<32:
        print('对不起,您的余额已不足!')
    else:
        print(goods_information)#输出商品信息,供客人查看
        goods_list=[0,'iphone6s','mac book','coffee','python book','bicyle']#商品列表
        price_list=[0,5800,9000,32,80,1500]#商品价格列表
        for i in range(1,6):
            buy = int(input('请输入您要想买的商品序号:'))
            if  salary-price_list[buy]>=0:#判断工资是否能买的起所选商品
                print(goods_list[buy]+'已加入购物车')
                buy_ed_list.append(goods_list[buy])#把成功加入购物车的商品加入已购列表
                print('您的余额为:',salary-price_list[buy])
                salary = salary - price_list[buy]
                consider=input('是否继续购买【购买输入y】:')
                if  consider=='y':#如果是就继续购买
                    i+=1
                    continue
                else :
                    print('谢谢您的光顾!')
                    print("以下是您已购买的商品清单:",buy_ed_list)#打印已购清单
            else :
                print('对不起,您的余额已不足!')
            break
    
    # In[]
    
    用户名 = input("请输入用户名:")
    current_users = ['sas','python','tablue','power','Excel']
    for i in range(2):
        a = [user.lower() for user in current_users]
        if 用户名.lower() in a:
            print("该用户名已经被使用")
        else:
            print("注册成功")
        current_users.append(用户名)
        break
    print(current_users)
    
    
    
    # In[]
    
    import pandas as pd
    import numpy as np
    
    df = pd.read_csv(r"C:UsersAdministratorpycodePython数据清洗课件 (9.6、9.9-9.12)pandasEuro2012_stats.csv")
    
    # 提取其中的Goals列
    df.Goals
    
    df.shape[0]   # 查看数据有多少行
    
    df.info()   # 查看数据集每一列的信息
    
    # 将数据集中的列Team, Yellow Cards和Red Cards单独存为一个名叫discipline的数据框
    
    discipline = df[['Team','Yellow Cards','Red Cards']]
    
    #   步骤8 对数据框discipline按照先Red Cards再Yellow Cards进行排序,并降序排列
    discipline.sort_values(["Red Cards","Yellow Cards"],ascending = False)
    
    
    # 计算所有球队拿到的黄牌数的平均值
    
    round(df['Yellow Cards'].mean())  # round  向下取整数。
    
    # 找到进球数Goals超过6的球队数据
    
    df[df['Goals']>6]
    
    # 选取以字母G开头的球队数据
    
    df[df['Team'].str.startswith('G')]   # 字符串中首字母
    
    # 选取前7列¶
    
    df.iloc[:,0:7]
    
    
    # 选取除了最后3列之外的全部列
    df.iloc[:,:-3]
    
    # In[]
    

      

  • 相关阅读:
    任意指定一个key获取该key所处在哪个node节点
    记一次mysql的问题处理@20181225
    Vue 自定义校验规则
    Vue 渲染状态标签
    Vue Token拦截跳转
    vue 组件路由问题
    vue npm运行报错
    Vue复习(一)
    从客户端中检测到有潜在危险的 Request.Form
    EF Core for MySql踩坑(二)
  • 原文地址:https://www.cnblogs.com/manjianlei/p/11668069.html
Copyright © 2020-2023  润新知