深浅拷贝作业
# 1.判断一个数是否是水仙花数, 水仙花数是一个三位数, 三位数的每一位的三次方的和还等于这个数. 那这个数就是一个水仙花数, 例如: 153 = 1**3 + 5**3 + 3**3 # 方法一:将num作为一个字符串 这里要注意最后比较sum和num的时候,要对num进行类型转换 sum = 0 num = input('请输入一个数字:') for i in num: # print(i) sum += int(i) ** 3 # print(sum) # sum += pow(int(i)) if sum == int(num): # 注意num要转化成int类型的 print(f'{num}是一个水仙花数') else: print(f'{num}不是水仙花数') # 将num作为一个数字 这里要注意int类型没有len方法,而且因为后面判断sum的时候还要使用原来的num,所以最好创建一个临时变量temp sum = 0 num = int(input('请输入一个数字:')) temp = num # 因为后面还要使用原来的num,所以创建一个临时变量temp 注意temp要在for循环的外面 for i in range(len(str(num))): # 控制循环的次数 # int 数据类型是不可迭代的,也没有len()方法 sum += (temp % 10) ** 3 # 计算每一位的三次方的和 temp //= 10 if sum == num: print(f'{num}是一个水仙花数') else: print(f'{num}不是水仙花数') # 2.给出一个纯数字列表. 请对列表进行排序(升级题, 难度系数很高. 最后再做这个). # 思路: # 1.完成a和b的数据交换. 例如, a = 10, b = 24 交换之后, a = 24, b = 10 # 2.循环列表. 判断a[i]和a[i+1]之间的大小关系, 如果a[i]比a[i+1]大. 则进行互换. 循环结束的时候. 当前列表中最大的数据就会被移动到最右端. lst = [12,2,13,3,14,4,15,5,16,6,10,7,9,8] # 方法1 lst.sort() # 是直接对原列表的操作 print(lst) # 方法2 for j in range(len(lst)): # 有多少个数就循环多少次 for i in range(len(lst)-1): # 一次循环只移动一个数字到相应的位置 if lst[i] > lst[i+1]: lst[i], lst[i+1] = lst[i+1], lst[i] print(lst) # 用while写(跟方法2一样) # lst = [88,5,8,6,1,23] # for a in range(len(lst)): # 记录内部排序的次数 # i = 0 # while i < len(lst) - 1: # 把最大值移动到右端 # if lst[i] > lst[i+1]: # 比较, # lst[i], lst[i+1] = lst[i+1], lst[i] # 交换 # i = i + 1 # print(lst) # 冒泡排序 一次循环只移动一个数字到相应的位置 Java经典写法 # for i in range(len(lst)): # i的取值范围是从0到len(lst)-1 # for j in range(len(lst)-i-1): # if lst[j] > lst[j+1]: # lst[j], lst[j+1] = lst[j+1], lst[j] # j += 1 # i += 1 # print(lst) # 3.想一想, 如果再次执行一次上面的操作. 最终第二大的数据就移动到了右端. 以此类推. 如果反复的进行执行相应的操作. 那这个列表就变成了一个有序列表. # 3. 税务部门征收所得税. 规定如下: # 1). 收入在2000以下的. 免征. # 2). 收入在2000-4000的, 超过2000部分要征收3%的税. # 3). 收入在4000-6000的, 超过4000部分要征收5%的税. # 4). 收入在6000-10000的, 超过6000部分要征收8%的税. # 5). 收入在10000以上的, 超过部分征收20%的税. # # 注, 如果一个人的收入是8000, 那么他要交2000到4000的税加上4000到6000的税加上6000到8000的税.收入= 8000-(4000-2000)*3%-(6000-4000)*4%-(8000-6000)*8% # # 让用户输入它的工资, 计算最终用户拿到手是多少钱. tax_4000 = (4000-2000)*0.03 tax_6000 = (6000-4000)*0.05 tax_10000 = (10000-6000)*0.08 salary = int(input('请输入你的工资:')) if salary > 10000: tax = (salary - 10000) * 0.20 + tax_10000 + tax_6000 + tax_4000 elif salary > 6000: tax = (salary - 6000) * 0.8 + tax_6000 + tax_4000 elif salary > 4000: tax = (salary - 4000) * 0.5 + tax_4000 elif salary > 2000: tax = (salary - 2000) * 0.3 else: tax = 0 print(f'最终你拿到手是{salary-tax}元钱') # 今天主要的作业就是把前面的作业好好练一练. 认真做好复习. # # 默写: # 简述什么是深浅拷贝. 1. = 没有创建新对象, 只是把内存地址进行了复制 2. 浅拷贝 lst.copy() 只拷贝第一层 3. 深拷贝 import copy copy.deepcopy(lst) 会把对象内部的所有内容进行拷贝 # 删除列表中姓周的人的信息 lst = ['周芷若', '周伯通', '王重阳', '周葫芦娃'] del_lst = [] #遍历老列表,将要删除的元素放到新列表中 for el in lst: if '周' in el: del_lst.append(el) # 遍历新列表,删除老列表中相同的元素 for i in del_lst: lst.remove(i) print(lst)
# 判断一个数是否是水仙花数, 水仙花数是一个三位数, # 三位数的每一位的三次方的和还等于这个数. # 那这个数就是一个水仙花数, 例如: 153 = 1**3 + 5**3 + 3**3 n = input("请输入你要判断的数:") sum = int(n[0])**3 + int(n[1])**3 + int(n[2])**3 if int(n) == sum: print("是水仙花数") else: print("不是水仙花") # 税务部门征收所得税. 规定如下: # 1). 收入在2000以下的. 免征. # 2). 收入在2000-4000的, 超过2000部分要征收3%的税. # 3). 收入在4000-6000的, 超过4000部分要征收5%的税. # 4). 收入在6000-10000的, 超过6000部分要征收8%的税. 8000 # 5). 收入在10000以上的, 超过部分征收20%的税. # # 注, 如果一个人的收入是8000, # 那么他要交2000到4000的税加上4000到6000的税加上6000到8000的税. # 收入= 8000-(4000-2000)*3%-(6000-4000)*4%-(8000-6000)*8% # # 让用户输入它的工资, 计算最终用户拿到手是多少钱. salary = int(input("请输入你的工资:")) if salary <= 2000: print("你的税是0") print("工资是%s" % salary) elif salary <= 4000: print("你的税是%s" % ((salary - 2000) * 0.03)) print("工资是%s" % (salary - ((salary - 2000) * 0.03))) elif salary <= 6000: print("你的税是%s" % ((2000*0.03) + (salary-4000)*0.05)) print("工资是%s" % (salary - ((2000*0.03) + (salary-4000)*0.05))) elif salary <= 10000: print("你的税是%s" % ((2000*0.03) + (2000*0.05) + (salary-6000)*0.08)) print("工资是%s" % (salary - ((2000*0.03) + (2000*0.05) + (salary-6000)*0.08))) else: # 超过10000 print("你的税是%s" % ((2000 * 0.03) + (2000 * 0.05) + (4000 * 0.08) + (salary - 10000) * 0.2)) print("工资是%s" % (salary - ((2000 * 0.03) + (2000 * 0.05) + (4000 * 0.08) + (salary - 10000) * 0.2))) # 2.给出一个纯数字列表. 请对列表进行排序(升级题, 难度系数很高. 最后再做这个). # 思路: # 1.完成a和b的数据交换. 例如, a = 10, b = 24 交换之后, a = 24, b = 10 # 2.循环列表. 判断a[i]和a[i+1]之间的大小关系, 如果a[i]比a[i+1]大. # 则进行互换. 循环结束的时候. 当前列表中最大的数据就会被移动到最右端. # 3.想一想, 如果再次执行一次上面的操作. 最终第二大的数据就移动到了右端. # 以此类推. 如果反复的进行执行相应的操作. 那这个列表就变成了一个有序列表. # 冒泡排序, 最low的冒泡. 可以进行优化, ACM, 领扣 lst = [1 , 2, 3, 43, 2, 2, 21, 1, 12, 3] # sort() for j in range(len(lst)): # ??? 有多少个数. 就循环多少次 for i in range(len(lst)-1): if lst[i] > lst[i+1]: lst[i], lst[i+1] = lst[i+1], lst[i] # 核心思想 交换 print(lst) # a = 10 # b = 24 # a, b = b, a # print(a) # print(b) # 其他编程语言 # c = a # a = b # b = c # print(a, b)