Python 程序设计和数据分析

#程序1
import random
import sys

def guess(s):
    try:
        write_in = int(input(s))
        if write_in > 0:
            dig = write_in
        else:
            print('请重新输入一个大于0的正整数:')
            return guess(s)
        return dig
    except ValueError:
        print("请输入数字!")
        return guess(s)

def catchme(n, m):
    list1 = []
    list2 = [-1, 1]

    for i in range(n):
        list1.append(i + 1)

    t = 1
    rabbit_in = int(random.random() * n + 1)
    while t <= m:
        guess_in = guess("这次指定几(1~{})号洞:".format(n))
        if rabbit_in == guess_in:
            print("恭喜抓到兔子了!")
            sys.exit()
        elif guess_in not in list1:
            print("没有该洞口,请重新输入一次")
            continue
        elif t == m:
            print("次数用完了,很遗憾没抓到兔子!")
            sys.exit()
        else:
            print("第{}次机会用过了!".format(t))
            t += 1
            if rabbit_in == 1:
                rabbit_in += 1
            elif rabbit_in == n:
                rabbit_in -= 1
            else:
                rabbit_in = rabbit_in + list2[int(random.random() * 2)]

if __name__ == '__main__':
    holes = guess("请输入洞口的数量:")
    times = guess("请输入玩家猜测的次数:")
    catchme(holes, times)

#程序2:
import random

rewardDict = {
    '一等奖':(0,10),
    '二等奖':(10,120),
    '三等奖':(120,360)
}

def rewardFun():
    """用户得奖等级"""
    #生成一个0~1之间的随机数
    num = random.random()*360
    #判断随机转盘转的是几等奖
    for k,v in rewardDict.items():
        if v[0] <= num < v[1]:
            return k

resultDict = {}

for i in range(10000):
    res = rewardFun()
    if res not in resultDict:
        resultDict[res] = 1
    else:
        resultDict[res] += 1

for k,v in resultDict.items():
    print(k,'------>',v)

#程序3:
import sys
try:
    num_in = input("请输入裁判人数:")
    num = int(''.join(i for i in num_in if i in '0123456789'))
except ValueError:
    print("请输入数字!")
    sys.exit()
else:
    list1 = []
    for i in range(num):
        try:
            m_in = input("请输入第{}个裁判的评分:".format(i + 1))
            m = int(''.join(i for i in m_in if i in '0123456789'))
            list1.append(m)
        except ValueError:
            print("请输入数字!")
            sys.exit()
    list1.remove(max(list1))
    list1.remove(min(list1))
    n = sum(list1) / float(len(list1))
    print("{:.2f}".format(n))

#分析1:
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd

df=pd.read_csv('C://Users/qiqi/Desktop/transcount.csv')
df=df.groupby('year').agg(np.mean)
gpu=pd.read_csv('C://Users/qiqi/Desktop/gpu_transcount.csv')
gpu=gpu.groupby('year').agg(np.mean)
df=pd.merge(df,gpu,how="outer",left_index=True,right_index=True)
df=df.replace(np.nan,0)


years=df.index.values
counts=df['trans_count'].values
gpu_count=df['gpu_trans_count'].values

cnt_log=np.log(counts)
plt.scatter(years,cnt_log,c=200*years,s=20+200*gpu_count/max(gpu_count),
            alpha=0.5,label='Scatter Plot')

gpu_start=gpu.index.values.min()
y_ann=np.log(df.at[gpu_start,'trans_count'])
ann_str='First GPU\n %d'%gpu_start
plt.annotate(ann_str,xy=(gpu_start,y_ann),
             arrowprops=dict(arrowstyle='->'),
             xytext=(-30,+70),textcoords='offset points')

plt.legend(loc=2)
plt.grid()
plt.xlabel('year')
plt.ylabel('Log Transistor Counts')
plt.title("Moore's Law & Transistor Counts",fontsize=16)
plt.show()


#分析2:
import pandas as pd
path1 = "chipotle.tsv"    # chipotle.tsv
chipo = pd.read_csv(path1, sep = '\t')


chipo.head(10)


print(chipo.shape[1])
chipo.columns


item = chipo[['item_name','quantity']].groupby(['item_name'],as_index=False).agg({'quantity':sum})
item.sort_values(['quantity'],ascending=False,inplace=True)
item.head()


chipo['item_name'].nunique()


chipo['quantity'].sum()


fudian = lambda x: float(x[1:-1])
chipo['item_price'] = chipo['item_price'].apply(fudian)
chipo


chipo['revenue'] = round(chipo['item_price'] * chipo['quantity'],2)
chipo['revenue'].sum()


chipo['order_id'].nunique()


chipo[['order_id','revenue']].groupby(by=['order_id']
).agg({'revenue':sum})['revenue'].mean()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值