zoukankan      html  css  js  c++  java
  • python 练习题(1-15)

    1、给定一个整数数组和一个目标值,找出数组中和为目标值的两个数。

    2、生成双色球

    3、逻辑运算(运算符优先级)

    4、输入一个整数,判断这个数是几位数

    5、用while循环计算 1-2+3-4...-99 中除了88以外的所有数的总和

    6、不通过引用三方变量,交换a、b的值

    7、找出字符串中的整数

    8、判断一个数是否是水仙花数, 水仙花数是一个三位数, 三位数的每一位的三次方的和还等于这个数.

    9、税务部门征收所得税

    10、循环读文件,并将每一行转成列表+字典的形式

    11、将循环列表转成字典

    12、写函数,用户传入修改的文件名,与要修改的内容,执行函数,完成整个文件的批量修改操作

    13、写函数,接收一个参数(此参数类型必须是可迭代对象),将可迭代对象的每个元素以’_’相连接,形成新的字符串,并返回.

    14、写函数,传入一个参数n,返回n的阶乘。例如:cal(7) 计算7*6*5*4*3*2*1

    15、九九乘法表

    1、给定一个整数数组和一个目标值,找出数组中和为目标值的两个数。

    你可以假设每个输入只对应一种答案,且同样的元素不能被重复利用。

    比如:给定 nums = [2, 7, 11, 15], target = 9
    因为 nums[0] + nums[1] = 2 + 7 = 9
    所以返回 [0, 1]
    lis = [1,3,3,4,5,6,8]
    def getIndex(li, target):
        new = []  #所有等于target的元组
        for index_i,i in enumerate(li):  #index_i = 0
            for index_j,j in enumerate(li[index_i + 1:]): #li[1:]少重复
                if i + j == target:
                    new.append([index_i, index_i + 1 + index_j]) #此时j的位置
        return new
    
    print(getIndex(lis,9))

    2、生成双色球

    #红球 1-33 选6个,一注中的红球不能重复
    #蓝球 1-16 选一个
    #不足2位的补零
    #写文件
    #循环num次,num注球不能重复
    import random
    def ranNum():   #生成随机数
        red = []     #红球列表
        while len(red) != 6:  #用while,使得取的红球6个号不重复,循环直到取到不同的6个数
            num = random.randint(1,33)  #从1,33随机取一个数
            num = str(num).zfill(2)  #把num转成str,不足2位的补零
            if num not in red:   #如果num不在红球列表中
                red.append(num)   #添加
        red_str = ' '.join(red)   #把红球列表拼接到一起
        blue = str(random.randint(1,16)).zfill(2)  #生成蓝球1个
        res = '红球是:%s  蓝球是:%s
    ' % (red_str,blue)  #函数返回一个str(换行)
        return res
    
    def op_file(filename,content):  #写入文件
        f = open(filename,'w',encoding='utf-8')
        if content:
            f.writelines(content)    #f.writelines()将文件循环写入
            print('写入文件成功')
        f.close()
    
    def main():
        all_tickets = []   #红+蓝列表
        num = input('请输入需要生成的双色球条数:').strip()
        if num.isdigit() and num !='0':
            num = int(num)
            while len(all_tickets) != num:  #while循环,直到取num组不同的条数
                data = ranNum()
                print(data)
                all_tickets.append(data)
        else:
            print('输入的条数必须是正整数')
        op_file('tick.txt',all_tickets)
    # ranNum()
    main()

    3、逻辑运算

    #Python运算符优先级:() > not > and > or,同一级别从左往右计算
    # x or yxTrue的,取左边的x;否则取y(andor相反,可只记住or)

    print(1 > 1 or 3 < 4 or 4 > 5 and 2 > 1 and 9 > 8 or 7 < 6)
    # 1 > 1 or 3 < 4 or False or 7 < 6 ===>True
    
    print(not 2 > 1 and 3 < 4 or 4 > 5 and 2 > 1 and 9 > 8 or 7 < 6)
    # True and 3 < 4 or 4 > 5 and 2 > 1 and 9 > 8 or 7 < 6
    # False or False or 7 < 6 ===>False
    
    print(8 or 3 and 4 or 2 and 0 or 9 and 7)
    # 8 or 4 or 0 or 7 ==>8
    print(0 or 2 and 3 and 4 or 6 and 0 or 3)
    # 0 or 4 or 0 or 3 ==>4
    
    print(6 or 2 > 1) #6
    print(3 or 2 > 1) #3
    print(0 or 5 < 4) #False
    print(5 < 4 or 3) #3
    print(2 > 1 or 6) #True
    print(3 and 2 > 1) #True--
    print(0 and 3 > 1) #0
    print(2 > 1 and 3) #3
    print(3 > 1 and 0) #0
    print(3 > 1 and 2 or 2 < 3 and 3 and 4 or 3 > 2) #2

     

    4、输入一个整数,判断这个数是几位数

    num = input("请输入一个数:").strip() #'88'
    if num.isdigit():
        num = int(num)
        count = 0
        while num > 0: #88>0
            num = num // 10  #取整:返回商的整数部分 8 0
            count += 1 #1
        print("这个数是%s位数" % (count))
    
    else:
        print('输入的不是整数')

    5、用while循环计算 1-2+3-4...-99 中除了88以外的所有数的总和

    sum = 0                       
    i = 1
    while i< 100:
        if i==88:
            i += 1 # 记得+1
            continue
        elif i%2==1:
            sum += i
        else:
            sum -= i
        i += 1
    
    print(sum)
    sum = 0
    i = 1
    j = -1 #引入符号位
    while i< 100:
        j = -j
        if i==88:
            i += 1 # 记得+1
            continue
        else:
            sum += i*j
        i += 1
    
    print(sum)

    6、直接交换两个变量的值:

    b, a = a, b    #交换两个变量的值

    通过引入三方变量来交换a、b的值:

    a = 1
    b = 2
    c = None
    
    c = b
    b = a
    a = c
    print(a,b)

    不通过引用三方变量,交换a、b的值:

    a = 1
    b = 2
    a = a + b  #a=3
    b = a - b  #b=3-2=1
    a = a - b  #a=3-1=2
    print(a,b)

    7、找出字符串中的整数

    s = 'fhdkladh123jk12dsfjsh3'           
    for i in s:                            
        if i.isalpha():                    
            s = s.replace(i,' ') #将字母替换成空格           
    print(s)  #        123  12      3      
    print(s.split())  #['123', '12', '3']  
    import re   #导入正则模块                                                            
    s = 'fhdkladh123jk12dsfjsh3'                                            
    print(re.findall('d+',s))  #匹配所有数字 >>>['123', '12', '3']               
    print(re.findall('D+',s))  #匹配所有非数字 >>>['fhdkladh', 'jk', 'dsfjsh']    

    8、判断一个数是否是水仙花数, 水仙花数是一个三位数, 三位数的每一位的三次方

    的和还等于这个数. 那这个数就是一个水仙花数, 例如: 153 = 1**3 + 5**3 + 3**3
    方法一:【解题思路】:s = '153',s[0]**3 + s[1]**3 + s[2]**3
    num = input('请输入一个三位数:').strip()
    sum = 0
    if num.isdecimal():
    if int(num)>99 and int(num)<1000:
    for i in num: #循环求和
    sum += int(i)**3 #每位数的三次幂
    if sum == int(num):
    print('是水仙花数')
    else:
    print('不是水仙花数')
    else:
    print('请输入一个三位数')
    else:
    print('请输入纯数字')

    方法二:
    num = input('请输入一个三位数:').strip() if num.isdigit() and int(num)>99 and int(num)<1000: num = int(num) ones = num % 10 #个位 tens = int(num / 10 % 10) #十位 hund = int(num / 100) #百位 print(ones,tens,hund) if ones**3 + tens**3 + hund**3==num: print('这是水仙花数') else: print('这不是水仙花数') else: print('输入不正确')

     

    9、税务部门征收所得税. 规定如下: 

            1). 收入在2000以下的. 免征.
            2). 收入在2000-4000的, 超过2000部分要征收3%的税. 
            3). 收入在4000-6000的, 超过4000部分要征收5%的税.
            4). 收入在6000-10000的, 超过6000部分要征收8%的税.  
            4). 收入在10000以上的, 超过部分征收20%的税. 
        注, 如果一个人的收入是8000, 那么他要交2000到4000的税加上4000到6000的税加上6000到8000的税. 
            收入 = 8000-(4000-2000)*3%-(6000-4000)*4%-(8000-6000)*8%
    让用户输入它的工资, 计算最终用户拿到手是多少。
    money = input('输入金额:').strip()
    money = float(money)
    # count = money
    tax = 0
    while count>0:
        if 0<count<=2000:
            single = 0
            tax += single
            count = count - 2000
        elif 2000<count<=4000:
            single = (count - 2000) * 0.03  #8000 2000*0.03 60
            tax += single
            count = count - (count - 2000)
        elif 4000<count<=6000:   #2000*0.05 100
            single = (count - 4000) * 0.05
            tax += single
            count = count - (count - 4000)
        elif 6000<count<=10000:   #2000 *0.08 =160
            single = (count - 6000) * 0.08
            tax += single
            count = count - (count - 6000)
        elif count>10000:
            single = (count - 10000) * 0.2
            tax += single
            count = count - (count - 10000)
    
    print('应缴税额:%.2f' %tax)
    print('实际结算:%.2f' %(money - tax))
    10、文件a1.txt的内容:

    序号 部门 人数 平均年龄 备注
    1       python    30         26         单身狗
    2 Linux 26 30 没对象
    3 运营部 20 24 女生多
    .......
    通过代码,将其构建成这种数据类型:
    [{'序号':'1','部门':Python,'人数':30,'平均年龄':26,'备注':'单身狗'},...... ]
    data = [] #总的列表
    with open('copy.txt','r',encoding='utf-8') as f:
        title = f.readline().strip().split() #第一行key
        # print(title) # ['序号', '部门', '人数', '平均年龄', '备注']
        dic = {}  #**每次循环line,dic都会被新行的值覆盖
        for line in f:  #循环读文件
            line_list = line.strip().split() #分割成list['1', 'python', '30', '26', '单身狗']
            if line_list: #**过滤掉是空的行,否则结果不准确
                for i in range(len(line_list)): #**有多少非空的行就循环多少次
                    dic[title[i]] = line_list[i]  #title和line_list相对应的值加入字典
                print(dic)
                data.append(dic) #每一行合成的字典加入总的列表
    print(data)

     11、

    list3 = [
    {"name": "alex", "hobby": "抽烟"},
    {"name": "alex", "hobby": "喝酒"},
    {"name": "alex", "hobby": "烫头"},
    {"name": "alex", "hobby": "Massage"},
    {"name": "wusir", "hobby": "喊麦"},
    {"name": "wusir", "hobby": "街舞"},]
    # 如何把上面的列表转换成下方的列表?
    list4 = [
    {"name": "alex", "hobby_list": ["抽烟", "喝酒", "烫头", "Massage"]},
    {"name": "wusir", "hobby_list": ["喊麦", "街舞"]}]
    #方法一:把名字作为字典的key
    dic = {}
    for i in list3:
        if i['name'] not in dic:  #'alex'这个key不存在
            dic[ i['name'] ] = {'name':i['name'], 'hobby_list':[i['hobby']]} #加入一个小字典
        else:
            dic[i['name']]['hobby_list'].append(i['hobby']) #list加元素
    
    print(dic) #{'alex': {'name': 'alex', 'hobby_list': ['抽烟', '喝酒', '烫头', 'Massage']},}
    print(list(dic.values())) #[{'name': 'alex', 'hobby_list': ['抽烟', '喝酒', '烫头', 'Massage']},}  #dic.values转成list
    #方法二
    list4 = []   #[{"name": "alex", "hobby_list": ["抽烟", ]} , ]
    for i in list3:   #i={"name": "alex", "hobby": "烫头"}
        for j in list4:  #j={"name": "alex", "hobby_list": ["抽烟", ] }
            if i['name']==j['name']:
                j['hobby_list'].append(i['name'])
                break  #退出j循环
        else:
            list4.append( {'name':i['name'],'hobby_list':[i['hobby']]} )  #'hobby_list':[]
    
    print(list4)

     12、写函数,用户传入修改的文件名,与要修改的内容,执行函数,完成整个文件的批量修改操作

    import os
    def file_update(filename,old=None,new=None):
        bak_file = filename +'.bak' #新文件
        with open(filename,encoding='utf-8') as f,
            open(bak_file,'w',encoding='utf-8') as fw:
            if old and new:  #新旧内容不为空
                for line in f: #一行一行读
                    if old in line:
                        line = line.replace(old,new) #替换
                    fw.write(line) #写入新文件
            else:  #如果不需要修改
                res = f.read() #直接读取原文件
                return res
        os.remove(filename)  #remove必须写在with open的外面,文件正在使用中不能删除
        os.rename(bak_file, filename) #重命名
    
    res = file_update('student_msg','xiaoxue','本科')
    print(res)

    13、写函数,接收一个参数(此参数类型必须是可迭代对象),将可迭代对象的每个元素以’_’相连接,形成新的字符串,并返回.

    def func(li):
        s = ''
        for i in li:
            i = str(i)
            s =s + i + '-'
        return s.strip('-') #去掉末尾的'-'
    
    print(func('abc'))
    print(func([1,'张三','李四']))

     14、写函数,传入一个参数n,返回n的阶乘。例如:cal(7) 计算7*6*5*4*3*2*1

    #方法一:
    def calc(n):
        if str(n).isdigit():
            if n==1 or n==0:  #0!=1
                return 1
            else:
                return n * calc(n-1)
        else:
            print('负数没有阶乘')
    
    print(calc(5))
    
    #方法二:
    def calc(n):
        sum = 1
        if n==1 or n==0:
            return 1
        else:
            while n>0:
                sum = sum * n
                n -= 1
            return sum
    print(calc(5))

    15、九九乘法表

    def func(n):
        for i in range(1,n+1):
            for j in range(1,i+1):
                print('%s * %s = %s'%(i,j,i*j),end='  ') #中间的空格
            print(' ') #每行末尾都是空格
    func(9)

     

  • 相关阅读:
    VIM 用正则表达式,非贪婪匹配,匹配竖杠,竖线, 匹配中文,中文正则,倒数第二列, 匹配任意一个字符 :
    中国科学院图书馆分类法
    让进程在后台可靠运行的几种方法 nohup,setsid,&,disown,CTRL-z ,screen
    Exception Handling Statements (C# Reference)
    ChannelFactory.Endpoint 上的地址属性为空。ChannelFactory 的终结点必须指定一个有效的地址。
    .NET中六个重要的概念:栈、堆、值类型、引用类型、装箱和拆箱
    WCF Host中的BaseAddress 和 Endpoint中的Address的区别
    使用vs自带的wcf配置工具
    Automatic Code Generation-->Implement Interface
    Learning WCF Chapter1 Exposing Multiple Service Endpoints
  • 原文地址:https://www.cnblogs.com/chenhongl/p/9168376.html
Copyright © 2011-2022 走看看