Python与数据科学实验(Exp2)

lnbos (letter, number, blank, other)

def lnbo(s):
    #s="helllo12345aa*&@*"
    letter = number = blank = other = 0
    for i in range(0,len(s)):
        if s[i]>='A' and s[i]<='Z' or s[i]>='a' and s[i]<='z':
            letter +=1
        elif s[i]>='0' and s[i]<='9':
            number +=1
        elif s[i]==' ':
            blank+=1
        else:
            other+=1
    #py返回多个值 以元组逐个接收
    return letter, number, blank, other
 
def main():
    s=input("请输入需要统计字符个数的内容")
    print("s=",s)
    l,n,b,o = lnbo(s)
    print("letter=",l)
    print("number=",n)
    print("blank=",b)
    print("other=",o)
 
if __name__=="__main__":
    main()

正整数的质因子分解。要求编写自定义函数实现该功能。

例如,给定10,打印出结果:[[2,5],[1,1]],表示10=21*51;

给定200,打印出结果:[[2,5],[3,2]],表示200=23*52.

#REF https://blog.csdn.net/ws15168689087/article/details/115536204
def intoPrimes():
    n=int(input("请输入需要分解的质因数n:"))
    ans1=[] #存储质因数
    ans2=[] #存储其指数
    for i in range(2,n):
        if n%i==0:
            ans1.append(i)
            s=0 #sum
            while n%i==0:
                s+=1
                n/=i
            ans2.append(s)
    return ans1,ans2

def main():
    t=[]
    ans1,ans2=intoPrimes()
    t.append(ans1)
    t.append(ans2)
    print(t)
    
if __name__=="__main__":
    main()

编写一个函数,参数为a、b、c,计算如下数学公式的值。

def culculate(a,b,c):
    import math
    res=0
    x1=math.e**(b**(pow(math.pi*0/5,0.5)))
    x2=(-b+pow(b**2-4*a*c,0.5))/(2*a)
    x3=(math.log(abs(a+b),10)+a/b)/math.log(a**b+100,math.e)
    print(x1+x2+x3)

def main():
    a,b,c = map(int,input("请输入a,b,c:").split(','))
    culculate(a,b,c)
    
    
if __name__=="__main__":
    main()

说明函数func的功能:

#将所输入各列表中的元素合并到一个列表中,从小到大排序,并输出最大值
#print(fun_exp2_4([678,29,579,13],[900,454,65,445],[12,54,2980,72]))
def fun_exp2_4(*list_args):
    all_list=[]
    for i in list_args:
        if isinstance(i,list):
            #print(i,isinstance(i,list))
            all_list.extend(i)
        else:
            return("列表参数有错误,请重新输入列表:")
    all_list.sort()
    #print(all_list)
    return all_list[-1]

函数功能:将所输入各列表中的元素合并到一个列表中,从小到大排序,并输出最大值

现有一个整数列表ls=[11,22,33,44,55,66,77,88,99,100,110,200,230,330],

将ls中所有大于66的元素保存至字典的第一个key ’k1’,

将小于等于66的元素保存至字典的第二个key ’k2’,

以及将ls中的全部奇数保存至字典的第三个key ’k3’.

打印出这个字典,并通过key访问字典元素,计算ls中所有奇数的平方和。

#fun_exp2_5
#l=[11,22,33,44,55,66,77,88,99,100,110,200,230,330]
def culcList(l):
    k1=k2=k3=[0]
    sum=0
    d={"k1":k1,"k2":k2,"k3":k3}
    n=len(l)
    print('[',end='')
    for i in l: #TypeError: unhashable type: 'list'
        #print(i)
        if i>66:
            d["k1"].append(i)
            #print("d[k1] append",i)
            #print("")
        else:
            d["k2"].append(i)
            #print("d[k2] append",i)
            #print("")
        if i%2!=0:
            print(i,end=',')
            sum=sum+i**2
            d["k3"].append(i)
            #print("")
    print(']')
    #print("d[k3]",d["k3"])
    #for i in d["k3"]:
        #print("i=",i,"sum=",sum)
    print("所有奇数的平方和:",sum)


def main():
    l=[11,22,33,44,55,66,77,88,99,100,110,200,230,330]
    culcList(l)
    
    
if __name__=="__main__":
    main()

这题怪里怪气,存的时候一板一眼,读的时候全是乱的,不知道怎么整🤣

可能是内存打架了

利用map和reduce函数编写一个str2float函数, 把字符串’123.456’转换成浮点数123.456.

此题不允许直接使用float()对字符串进行直接转换。

#REF https://blog.csdn.net/weixin_39097911/article/details/121420312
#sum = reduce(lambda x,y : x+y, [1,2,3,4,5])
from functools import reduce 
def str2float(s):
    DIGITS = {
        '0': 0,
        '1': 1,
        '2': 2,
        '3': 3,
        '4': 4,
        '5': 5,
        '6': 6,
        '7': 7,
        '8': 8,
        '9': 9
    }
 
    def char2num(s):
        return DIGITS[s]
 
    s_int = s.split('.')[0]
    s_frac = s.split('.')[1]
    return reduce(lambda x, y: x*10 +y, map(char2num, s_int)) \
+ reduce(lambda x, y: x * 0.1 + y, map(char2num, s_frac[::-1])) / 10


def main():
    str=input("str2float,enter str:") #str="123.456"
    print("str2float(\'%s\') = %f" % (str,str2float(str)))
    if abs(str2float(str) - 123.456) < 0.00001:
        print('changed successfully')
    else:
        print('failed to change')
    
if __name__=="__main__":
    main()

craps 赌博游戏

游戏规则:玩家掷两个骰子,每个骰子点数为1-6,如果第一次点数和为7或11,则玩家胜;

如果点数和为2、3或12,则玩家输庄家胜。若和为其他点数,则记录第一次的点数和,

玩家继续掷骰子,直至点数和等于第一次掷出的点数和则玩家胜;若掷出的点数和为7则庄家胜。

编写程序按以上规则实现游戏,random.randint( low, high + 1)可实现随机生成[low,high]之间的整数。

import random
def craps(): #掷骰子 player,banker = True,False
    low=1
    high=6
    p1=random.randint(low, high+1)
    p2=random.randint(low, high+1)
    printer(p1,p2)
    if p1+p2==7 or p1+p2==11:
        print("players won")
    elif p1+p2==2 or p1+p2==3 or p1+p2==12:
        print("the banker won")
    else:
        ans=p1+p2
        print("In draw! ans=",ans)
        print("")
        p1=random.randint(low, high+1)
        p2=random.randint(low, high+1)
        printer(p1,p2)
        while(p1+p2!=ans):
            if p1+p2==7:
                print("the banker won")
                break
            else:
                p1=random.randint(low, high+1)
                p2=random.randint(low, high+1)
                printer(p1,p2)
        if p1+p2==ans:
                print("players won")
                
def printer(p1,p2):
    print("player1 got:",p1)
    print("player2 got:",p2)
    print("players got:",p1+p2)
    print("")

def main():
    craps()
    
if __name__=="__main__":
    main()

编写一个python程序,计算指定年月日是这一年的第几天。

def isLeap(y):
    if y%4==0 and y%100!=0 or y%400==0:
        print(y,"年是闰年")
        return True
    else:
        print(y,"年不是闰年")
        return False

def culcDays(y,m,d):
    res=0
    days=[31,28,31,30,31,30,31,31,30,31,30,31] #py_list不定义长度
    if(isLeap(y)):
        days[1]=29 #注意下标 2月应该是days[1]
    for i in range(0,m-1):
        res+=days[i]
        print(i+1,"月",days[i],"天,res",res)
    return res+d

#py接受多个输入:a,b=map(ElementType,input("请输入").split(','))
def main():
    y,m,d = map(int,input("请输入y-m-d计算天数").split('-'))    
    print("%d-%d-%d是:第%d天" % (y,m,d,culcDays(y,m,d)))
    
if __name__=="__main__":
    main()

编写一个python程序,给你两个二进制字符串a和b,以二进制字符串的形式返回它们的和。

#REF https://blog.csdn.net/O_011/article/details/127385327
def addBinary(a,b):
    c1=int(a,2);
    c2=int(b,2);
    c3=c1+c2;
    m=bin(c3).replace('0b','');
    return m;

#py接受多个输入:a,b=map(ElementType,input("请输入").split(','))
#注意此处IO均为字符串类型
def main():
    a,b = input("请输入a,b的值").split(',')    
    print("%s的%s二进制相加:%s" % (a,b,addBinary(a,b)))

编写函数实现pow(x,n),即计算x的整数n次幂函数。

注意:不得直接调用python的x**n计算方式或其它库函数。

def mypow(x,n):
    product=1
    for i in range(0,n):
        product*=x;
    return product

def main():
    x,n = map(int, input("请输入x,n的值").split(','))    
    print("%d的%d次幂:%d" % (x,n,mypow(x,n)))
    
if __name__=="__main__":
    main()

请计算出1~10000中平方根是整数的数,要求使用filter函数来处理该问题,并输出结果。

#如果平方根是整数,那么整数1~100的平方在1~10000 
import math
def is_sqr(n):
    return math.sqrt(n)%1==0 #判断一个数是整数

def main():
    L=(range(1,101))
    answer = list(filter(is_sqr,L))
    print(answer)
   

if __name__=="__main__":
    main()
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值