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)

     

  • 相关阅读:
    UVa532 Dungeon Master 三维迷宫
    6.4.2 走迷宫
    UVA 439 Knight Moves
    UVa784 Maze Exploration
    UVa657 The die is cast
    UVa572 Oil Deposits DFS求连通块
    UVa10562 Undraw the Trees
    UVa839 Not so Mobile
    327
    UVa699 The Falling Leaves
  • 原文地址:https://www.cnblogs.com/chenhongl/p/9168376.html
Copyright © 2011-2022 走看看