chenhongl

导航

 

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\n' % (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)

 

 

 

posted on 2018-06-11 18:00  chenhongl  阅读(1142)  评论(0编辑  收藏  举报