作业1
1.已知一个数字列表,求列表中心元素。
num_list = [12, 34, 5, 76, 87, 90, 3, 6]
if len(num_list) & 1 == 0:
print(num_list[(len(num_list) // 2) - 1], num_list[len(num_list) // 2])
else:
print(num_list[len(num_list) // 2])
2.已知一个数字列表,求所有元素和。
num_list = [12, 34, 5, 76, 87, 90, 3]
sum1 = 0
for num in num_list:
sum1 += num
print(sum1)
3.已知一个数字列表,输出所有奇数下标元素。
num_list = [12, 34, 5, 76, 87, 90, 3, 6]
for index in range(1, len(num_list), 2):
print(index, num_list[index])
# print(num_list[1::2])
4.已知一个数字列表,输出所有元素中,值为奇数的元素。
num_list = [12, 34, 5, 76, 87, 90, 3, 6, 7, 45]
for num in num_list:
if num & 1:
print(num, end=' ')
5.已知一个数字列表,将所有元素乘二。
例如:nums = [1, 2, 3, 4] —> nums = [2, 4, 6, 8]
num_list = [12, 34, 5, 76, 87, 90, 3, -5]
for x in range(len(num_list)):
num_list[x] *= 2
print(num_list)
6.有一个长度是10的列表,数组内有10个人名,要求去掉重复的
例如:names = ['张三', '李四', '大黄', '张三'] -> names = ['张三', '李四', '大黄']
names = ['张三', '李四', '张三', '王五', '赵六', '钱七', '孙八',\
'李四', '吴十', '赵六']
new_names = []
for name in names:
if name not in new_names:
new_names.append(name)
names = new_names
print(names)
7.已经一个数字列表(数字大小在0~6535之间), 将列表转换成数字对应的字符列表
例如: list1 = [97, 98, 99] -> list1 = ['a', 'b', 'c']
num_list = [97, 34, 33, 76, 87, 90, 102, 50, 69, 45]
index = -1
for num in num_list:
index += 1
num_list[index] = chr(num_list[index])
print(num_list)
8.用一个列表来保存一个节目的所有分数,求平均分数(去掉一个最高分,去掉一个最低分,求最后得分)
num_list = [69, 85, 76, 79, 87, 90, 97, 71]
max_num = num_list[0]
min_num = num_list[0]
for num in num_list:
if num > max_num:
max_num = num
if num < min_num:
min_num = num
num_list.remove(min_num)
num_list.remove(max_num)
print(num_list)
sum1 = 0
count = 0
for num1 in num_list:
count += 1
sum1 += num1
average = sum1 / count
print(average)
9.有两个列表A和B,使用列表C来获取两个列表中公共的元素
例如: A = [1, 'a', 4, 90] B = ['a', 8, 'j', 1] --> C = [1, 'a']
list_1 = [1, '我', 20, 'abc', -8, 20]
list_2 = ['他', 45, 67, 'abc', 12, 1]
list_3 = []
for element in list_1:
for element_2 in list_2:
if element == element_2:
list_3.append(element)
print(list_3)
10.有一个数字列表,获取这个列表中的最大值.(注意: 不能使用max函数)
例如: nums = [19, 89, 90, 600, 1] —> 600
num_list = [69, 34, 123, 76, 87, 90, 211, -5]
max_num = num_list[0]
for num in num_list[1:]:
if num > max_num:
max_num = num
print(max_num)
11.获取列表中出现次数最多的元素
例如:nums = [1, 2, 3,1,4,2,1,3,7,3,3] —> 打印:3
nums = [5, 4, 67, 1, 87, 90, 1, 67, 45, 1, 90, 103, -45, 90, 86, 90]
index1 = 0 # 出现次数最多的元素的下标
max1 = 0 #最大的元素出现次数
for i in range(len(nums)):
count = 0 #每一个元素出现的次数
for j in range(i+1, len(nums)):
if nums[i] == nums[j]:
count += 1
if count > max1:
max1 = count
index1 = i
print(nums[index1])
作业二
1.一张纸的厚度大约是0.08mm,对折多少次之后能达到珠穆朗玛峰的高度(8848.13米)?
paper_height = 0.00008
count = 0
while True:
paper_height *= 2
count += 1
if paper_height >= 8848.13:
break
print(count)
- 古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?
n = int(input('请输入月份:'))
n2 = 0
n1 = 1
current = 1
for x in range(1, n):
current = n2 + n1
n2 = n1
n1 = current
print('第%d个月数量是%d' % (n, current))
- 将一个正整数分解质因数。例如:输入90,打印出90=2x3x3x5。
list1 = []
def prime_factor(num):
while True:
for i in range(2, num+1):
if num % i == 0:
num = int(num / i)
list1.append(i)
break
if num == 1 or list1 == []:
break
n = int(input('输入一个整数:'))
prime_factor(n)
print('%d=' % n, end='')
for x in range(len(list1)):
print(list1[x], end='')
if x == len(list1)-1:
print('')
else:
print('*', end='')
- 输入两个正整数m和n,求其最大公约数和最小公倍数。 程序分析:利用辗除法。
m, n = int(input('m=')), int(input('n='))
max_num = 1
for x in range(2, min(m, n)+1):
if m % x == 0 and n % x == 0:
max_num = x
min_num = int(m * n / max_num)
print('最大公约数:', max_num)
print('最小公倍数:', min_num)
- 一个数如果恰好等于它的因子之和,这个数就称为 "完数 "。例如6=1+2+3. 编程 找出1000以内的所有完数
for i in range(2, 1001):
list1 = [1]
for x in range(2, i // 2 + 1):
if i % x == 0:
list1.append(x)
if sum(list1) == i:
print(i, '是完数')
6.输入某年某月某日,判断这一天是这一年的第几天? 程序分析:以3月5日为例,应该先把前两个月的加起来,然后再加上5天即本年的第几天,特殊情况,闰年且输入月份大于3时需考虑多加一天。
month = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
y, m, d = int(input('年份:')), int(input('月份:')), int(input('日子:'))
if (y % 4 == 0 and y % 100 != 0) or y % 400 == 0:
month[1] = 29
sum_day = sum(month[0:m-1]) + d
print(sum_day)
- 某个公司采用公用电话传递数据,数据是四位的整数,在传递过程中是加密的,加密规则如下:每位数字都加上5,然后用和除以10的余数代替该数字,再将第一位和第四位交换,第二位和第三位交换。求输入的四位整数加密后的值
num = int(input('请输入4位整数:'))
list_num = [num // 1000, num // 100 % 10, num % 100 // 10, num % 10]
for x in range(4):
list_num[x] = (list_num[x] + 5) % 10
list_num = list_num[::-1]
print(list_num[0] * 1000 + list_num[1] * 100 + list_num[2] * 10 + list_num[3])
-
获取第n个丑数。 什么是丑数: 因子只包含2,3,5的数
6 =1* 2*3 -> 丑数
2 = 1*2 -> 丑数
7 = 1*7 -> 不是丑数
1, 2, 3, 4, 5, 6, 8,9,10, 12 ….
nums = [2, 3, 5]
def ugly(m):
list1 = []
flag = True
if m == 1:
flag = True
else:
while True:
for i in range(2, m+1):
if m % i == 0:
m = int(m / i)
list1.append(i)
break
if m == 1 or list1 == []:
break
if list == []:
flag = False
else:
for x in list1:
if x not in nums:
flag = False
return flag
n = int(input('输入需要查看的第几个丑数:'))
num = 1
count = 0
while True:
if ugly(num):
count += 1
if count == n:
break
num += 1
print('第%d个质数是:' % n, num)