zoukankan      html  css  js  c++  java
  • python 做题

    哎,,辛苦的一天,写了这些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)
    
    
    # -----------------------------------------------------------------------
    # 北京出租车计价:
    # 收费标准:
    # 3公里以内收费13元
    # 基本单价: 2.3元 / 公里(超出3公里以外)
    # 空驶费: 超过15公里后,每公里加收单价的50 % 的空驶费(即3.45元 / 公里)
    # 要求:输入公里数,打印出费用金额(以元为单位四舍五入)
    
    
    km = int(input("请输入公里数:"))
    money=0
    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)
    
    # -------------------------------------------------------------
    # 2. 输入一个学生的三科成绩(三个整数):
    #   打印出最高分是多少?
    #   打印出最低分是多少?
    #   打印出平均分是多少?
    
    
    a=input("请输入第一科成绩:")
    b=input("请输入第二科成绩:")
    c=input("请输入第三科成绩:")
    x=max(a,b,c)
    print("最高成绩是:",x)
    y=min(a,b,c)
    print("最低成绩是:",y)
    
    zuida = a  #假设A最大
    if b>zuida:
        zuida = b
    if c>zuida:
        zuida=c
    print(zuida)
    
    # ----------------------------------------------------------------
    # 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 = int(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("你的输入有误")
    
    # ----------------------------------------------------------
    # 2. 输入一年中的月份(1~12) 输出这个月在哪儿
    # 个季度,如果输入的是其它数,则提示您输错了
    
    for i in range(3):
        yuefen = int(input("请输入月份:"))
        if yuefen >=1 and yuefen <= 12:
            if yuefen <=3:
                print("春季")
            elif yuefen <=6:
                print("夏季")
            elif yuefen <=9:
                print("秋季")
            else:
                print("冬季")
    
    # ------------------------------------------------------------------
    # 3. 分三次输入当前的小时,分钟和秒数,在终端
    # 打印时此距离凌晨0:0:0 秒过了多少秒
    
    xiaoshi = int(input("请输入小时:"))
    fenzhon = int(input("请输入分钟:"))
    miaoshu = int(input("请输入秒数:"))
    s = xiaoshi*60*60+fenzhon*60+miaoshu
    print("你现在距离0:0:0经过了",s,"秒")
    
    
    # -----------------------------------------------------
    # 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, "不是回文")
    
    # ------------------------------------------------
    # 题目:有1题目:有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?
    # 都是多少?、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?
    
    for i in range(1,4):
        for j in range(1,4):
            for k in range(1,4):
                if (i!=j) and (i!=k) and (j!=k):
                    print(i,j,k)
    
    
    # ---------------------------------------------------------
    # 题目:企业发放的奖金根据利润提成。利润(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
    
    # --------------------------------------------------------------------------------------------------------------
    # 题目:一个整数,它加上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)
    
    
    # -------------------------------------------------------------------------------------------------------------
    # 题目:输入某年某月某日,判断这一天是这一年的第几天?
    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)
    
    #  --------------------------------------------------------------------------------------------------------
    #  写出九九乘法表的效果
    
    for  m in range(1,10):
        for n in range(1,10):
            if m>=n:                                  #  控制跳转行的,当m>n时进入m的下一次循环,,为了呈现出下三角的形状
                print('%s×%s=%s'%(m,n,m*n),end=' ')    #   end = ' '  表示去除自动换行,让数据呈现一行     其中的%s为占位符,表示将得到值插入所占的位置
        print()                                         #   让for n in range(1,10) 循环一次结束换行一次
    
    
    # ---------------------------------------------------------------------------
    #  1到100求和
    x = 0
    for i in range(1,101):
        x = x+1
    # 第二种方法
    sum(range(1,101))
    
    #  ------------------------------------------------------------------
    # 用代码实现,输入三个值使得从小到大的顺序输出
    # -------------------------------------------------------------------
    
    data = []
    for i in range(1,4):      # 控制循环的次数,使得你有三次输入的机会
        x = int(input('请输入第%d个数值:
    '%(i)))
        data.append(x)       # 将输入的值存放到建立好的列表中
    data.sort()      # 对列表的数据进行从小大打的排序
    print(data)
    
    # ----------------------------------------------------------
    # 用*打印出来一个P的形状
    # ----------------------------------------------------------
    
    print ('*' * 10)
    for i in range(5):
        print ('*        *')
    print ('*' * 10)
    print ('*
    ' * 6)
    
    
    #  -------------------------------------------------------------------
    #题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,
    # 小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?
    
    # -------------------------------------------------------------------
    f1 = 1
    f2 = 1
    for i in range(1,12):
        print ('%12d %12d' % (f1,f2))
        if (i % 2) == 0:
            print ('
    ')
        f1 = f1 + f2
        f2 = f1 + f2
    #  -------------------------------------------------------
    #  计算在101到201之间有多少个素数
    
    
    h = 0
    leap = 1
    from math import sqrt
    from sys import stdout
    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 ('The total is %d' % h)
    
    
    # ---------------------------------
    #  创建列表将文字所对应的索引打印出来
    # ----------------------------------
    

      

  • 相关阅读:
    POJ 2251 Dungeon Master
    HDU 3085 Nightmare Ⅱ
    CodeForces 1060 B Maximum Sum of Digits
    HDU 1166 敌兵布阵(树状数组)
    HDOJ 2050 折线分割平面
    HDU 5879 Cure
    HDU 1878 欧拉回路
    HDU 6225 Little Boxes
    ZOJ 2971 Give Me the Number
    HDU 2680 Choose the best route
  • 原文地址:https://www.cnblogs.com/manjianlei/p/11374166.html
Copyright © 2011-2022 走看看