day05-列表
2018-07-20 本文已影响0人
奈斯凸米特
1.输出函数:print()
- 默认每一个print函数,输出完内容之后会输出一个换行
- 一个print函数输出多个内容的时候,内容之间是用空格隔开的
- 内容后边加end=来设置结束标志(默认是'\n')
- 通过设置sep的值,来设置多个内容之间的间隔符(默认是' ')
print('aaa', 100, end='\n', sep=',')
print('bb')
结果:
aaa,100
bb
2. 输入函数:input()函数
- input()函数可以接收从控制台输入的内容(以回车为结束标志)
- input函数会阻塞线程,程序执行到input的时候会停下来,等待用户的输入,输入完成后才会接着执行下面的内容
- 接收到的数据是以字符串的形式返回的(python2.x中输入的是数字的时候,可能返回int类型或者浮点型数据)
value = input('请输入:')
print('aaa', value, type(value))
结果:
请输入:12
aaa 12 <class 'str'>
练习:猜数字游戏
随机产生一个1-100的整数,输入的数字如果和产生的随机数是一样的,就提示猜对了,并且游戏结束
如果输入的数大于或者小于随机数,就提示输入的数字偏大或者偏小,然后让重新输入
import random
number = random.randint(1, 100)
count = 0
while True:
value = int(input('猜:'))
count += 1
if number == value:
if count >= 6:
print('智商着急')
if count == 1:
print('运气不错')
print('对了')
break
elif number > value:
print('小了,重新猜:')
elif number < value: # 或者直接else:
print('大了,重新猜:')
结果:
猜:50
大了,重新猜:
猜:20
小了,重新猜:
猜:40
大了,重新猜:
猜:30
小了,重新猜:
猜:38
大了,重新猜:
猜:35
小了,重新猜:
猜:36
智商着急
对了
3. 列表、字典、元组、集合都是序列,都是容器类型的数据类型
列表(list):用来存储多个数据的一种数据类型。里面存储的单个数据,我们叫元素
特点:1. 有序的 2. 可变的(可变指的是容器中的内容的个数和值可变) 3. 元素可以是任何类型的数据
列表的值:用[] 将列表中的元素括起来,多个元素之间用逗号隔开。[] --> 空列表
- 怎么声明一个列表
a. 声明一个变量,赋一个列表值
list1 = [] # 创建一个空的列表
print(type(list1))
结果:
<class 'list'>
list2 = [1, 2.4, 'abc', True, [1, 2], {'a': 1}]
print(list2, type(list2))
结果:
[1, 2.4, 'abc', True, [1, 2], {'a': 1}] <class 'list'>
b. 将其他的数据类型转换成列表
list3 = list('asd12')
print(list3)
结果:
['a', 's', 'd', '1', '2']
c. 将取出来的值乘以2创建一个列表
list4 = list(i*2 for i in range(10))
print(list4)
结果:
[0, 2, 4, 6, 8, 10, 12, 14, 16, 18]
d. 创建一个100以内3的倍数的列表
list5 = list(i for i in range(100) if i % 3 == 0)
print(list5)
结果:
[0, 3, 6, 9, 12, 15, 18, 21, 24, 27, 30, 33, 36, 39, 42, 45, 48, 51, 54, 57, 60, 63, 66, 69, 72, 75, 78, 81, 84, 87, 90, 93, 96, 99]
- 获取列表元素
列表中的每一个元素都对应一个下标:0 ~ 列表长度-1 ; -1 ~ - 列表长度
names = ['哮天犬', '小狗', '孙悟空', '老沙', 'Faker']
a. 获取单个元素- 列表名[下标]
- 下标不能越界
print(names[1])
print(names[-3])
结果:
小狗
孙悟空
b. 获取部分元素(切片)
- 列表名[起始下标:结束下标]:获取从起始下标开始,到结束下标前的所有元素。结果是一个列表
- 列表名[起始下标:结束下标:步进] 从起始下标开始,每次下标值加步进获取下一个元素,直到结束下标前为止
- 起始下标和结束下标都可以缺省:如果步进是正数,起始下标缺省就是从第一个元素开始获取;如果步进是负数,就从最后一个元素开始获取
- 结束下标缺省,步进是正数,获取到最后一个元素;步进是负数,就从后往前获取到第一个元素
print(names[1:4])
print(names[-4:-1])
print(names[0:4:2])
print(names[:]) # 获取列表中的所有元素,重新创建一个新的列表
结果:
['小狗', '孙悟空', '老沙']
['小狗', '孙悟空', '老沙']
['哮天犬', '孙悟空']
['哮天犬', '小狗', '孙悟空', '老沙', 'Faker']
c. 一个一个的获取列表的所有元素(遍历列表)
scores = [12, 89, 43, 36, 98, 34, 56]
for循环遍历:
for item in scores:
print(item)
结果:
12
89
43
36
98
34
56
while循环遍历:
index = 0
while index < len(scores):
print(scores[index])
index += 1
结果:
12
89
43
36
98
34
56
- 获取列表的长度(获取列表元素的个数)
len(列表)
print(len(scores))
结果:
7
4. 添加列表元素
skills = []
print(skills)
结果:
[]
- append函数
列表.append(元素)
在列表的末尾添加一个元素
skills.append('龟派气功')
print(skills)
skills.append('居里夫人')
print(skills)
结果:
['龟派气功']
['龟派气功', '居里夫人']
- insert函数
列表.insert(下标,元素)
在列表的指定的下标前插入一个元素
注意:在这儿,下标可以越界,如果越界,就会插入到列表的最前面或者最后面
skills.insert(1, '无敌风火轮')
print(skills)
结果:
['龟派气功', '无敌风火轮', '居里夫人']
- 加:+
列表1 + 列表2
将列表2中的元素和列表1中的元素合并后创建一个新的列表
new_skills = skills + ['如来神掌', '一个达布妞']
print(new_skills)
结果:
['龟派气功', '无敌风火轮', '居里夫人', '如来神掌', '一个达布妞']
练习:从控制台输入10个学生的成绩,然后保存在一个列表中
scores = []
for _ in range(10):
score = float(input('输入学生的成绩:'))
scores.append(score)
print(scores)
结果:
输入学生的成绩:1
输入学生的成绩:2
输入学生的成绩:3
输入学生的成绩:4
输入学生的成绩:5
输入学生的成绩:6
输入学生的成绩:7
输入学生的成绩:8
输入学生的成绩:9
输入学生的成绩:10
[1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0]
5. 删除列表元素
注意:不管是添加元素还是删除元素,都会重新分配下标
films = ['天线宝宝', '一人之下', '我不是药神', '神奇宝贝', '植物大战僵尸', '天线宝宝']
- del语句
del语句可以删除任何数据
del 列表[下标]:删除列表中指定下标的元素
注意:这里的下标不能越界
del films[1]
print(films)
结果:
['天线宝宝', '我不是药神', '神奇宝贝', '植物大战僵尸', '天线宝宝']
- remove方法
列表.remove(元素):删除列表中的指定的元素(如果同一个元素有多个,只删除最前面那一个)
注意:如果要删除的元素不在列表中,会报错
films.remove('天线宝宝')
print(films)
结果:
['我不是药神', '神奇宝贝', '植物大战僵尸', '天线宝宝']
- pop方法
列表.pop():将列表中的最后一个元素取出来
列表.pop(下标):将列表中指定下标的元素取出来
注意:这里的下标不能越界
film = films.pop()
print(film)
film = films.pop(1)
print(films, film)
结果:
天线宝宝
['我不是药神', '植物大战僵尸'] 神奇宝贝
练习:scores = [23,31,78,56,89,68,1,97],删除所有小于60分的成绩
scores = [23, 31, 78, 56, 89, 68, 1, 97]
for score in scores[:]: # 这里的scores[:] 相当于[23, 31, 78, 56, 89, 68, 1, 97],一个新的地址,只更新不用它
if score < 60:
scores.remove(score)
print(scores)
结果:
[78, 89, 68, 97]
作业:
- 求s=a+aa+aaa+aaaa+aa...a的值,其中a是⼀一个数字。例例如2+22+222+2222+22222(此时共有5个数相 加),⼏几个数相加有键盘控制
a = int(input('请输入a的值:'))
time = int(input('请输入有几个数相加:'))
sum = 0
num = 0
for i in range(time):
num = num * 10 + a
sum = sum + num
print('结果为:',sum)
结果:
请输入a的值:2
请输入有几个数相加:5
结果为: 24690
- 打印图形1
n = 4
@
@@
@@@
@@@@
n = 5
@
@@
@@@
@@@@
@@@@@
n = int(input('请输入n:'))
for i in range(1, n+1):
for j in range(1, i+1):
print('@', end='')
print('')
请输入n:5
@
@@
@@@
@@@@
@@@@@
-
打印图形2
22.png
n = int(input('请输入n:'))
for i in range(1,n+1):
print(' '*(n-((2*i-1)//2)-1) + '@'*(2*i-1))
请输入n:5
@
@@@
@@@@@
@@@@@@@
@@@@@@@@@
- 打印图形3
n = 3
@@@
@@
@
n = int(input('输入n:'))
for i in range(1,n+1):
print('@'*(n-i+1))
输入n:3
@@@
@@
@
- 输入两个正整数m和n,求其最大公约数和最小公倍数。
num1 = int(input('请输入第一个数:'))
num2 = int(input('请输入第二个数:'))
min1 = min(num1,num2)
max1 = max(num1,num2)
big = []
for i in range(1,min1+1):
if num1 % i == 0 and num2 % i == 0:
big.append(i)
for j in range(max1,num1*num2 + 1):
if j % num1 == 0 and j % num2 == 0:
break
print('最小公倍数:', j)
print('最大公约数:', max(big))
请输入第一个数:4
请输入第二个数:18
最小公倍数: 36
最大公约数: 2
- 一个数如果恰好等于它的因子之和,这个数就称为 "完数 "。例如6=1+2+3.编程 找出1000以内的所有完数
for i in range(1, 1001):
sum = 0
for j in range(1, i):
if i % j == 0:
sum = sum + j
if sum == i:
print(i)
6
24
28
496
- 输出9*9口诀
for i in range(1, 10):
for j in range(1, i+1):
num = i * j
print('%d*%d=%d ' % (j,i, num),end = '')
print()
1*1=1
1*2=2 2*2=4
1*3=3 2*3=6 3*3=9
1*4=4 2*4=8 3*4=12 4*4=16
1*5=5 2*5=10 3*5=15 4*5=20 5*5=25
1*6=6 2*6=12 3*6=18 4*6=24 5*6=30 6*6=36
1*7=7 2*7=14 3*7=21 4*7=28 5*7=35 6*7=42 7*7=49
1*8=8 2*8=16 3*8=24 4*8=32 5*8=40 6*8=48 7*8=56 8*8=64
1*9=9 2*9=18 3*9=27 4*9=36 5*9=45 6*9=54 7*9=63 8*9=72 9*9=81
- 一个5位数,判断它是不是回文数。即12321是回文数,个位与万位相同,十位与千位相同。
num = int(input('请输入一个五位数:'))
ge = num % 10
shi = num % 100 // 10
qian = num % 10000 // 1000
wan = num // 10000
if ge == wan and shi == qian:
print('%d是回文数' % (num))
elif len(str(num)) != 5:
print('你输入的不是五位数')
else:
print('%d不是回文数' % (num))
请输入一个五位数:12333
12333不是回文数
请输入一个五位数:12321
12321是回文数
请输入一个五位数:123
你输入的不是五位数
-
打印图形(菱形)
n = int(input('请输入n:'))
for i in range(1, n+1):
print(' '*(n-((2*i-1)//2)-1) + '@' * (2*i-1))
for j in range(1, n):
print(' '*j + '@' * (2*(n-j)-1) )
请输入n:4
@
@@@
@@@@@
@@@@@@@
@@@@@
@@@
@
- 输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。
a = input('请输入一行字符:')
letter = 0
space = 0
number = 0
other = 0
for i in range(len(a)):
if a[i].isalpha():
letter += 1
elif a[i].isspace():
space += 1
elif a[i].isdigit():
number += 1
else:
other += 1
print('字母有%d个,空格有%d个,数字有%d个,其他字符有%d个' % (letter, space, number, other))
请输入一行字符:123ad * &
字母有2个,空格有2个,数字有3个,其他字符有2个
- 已知一个列表,求列表中心元素。
list1 = [1, 2, 3, 4, 5]
a = len(list1)
print(list1[a//2])
3
- 已知一个列列表,求所有元素和。
list1 = [1,2,3,4,5]
sum1 = 0
for i in range(len(list1)):
sum1 += int(list1[i])
print(sum1)
15
- 已知一个列表,输出所有奇数下标元素。
list1 = [1,2,3,4,5]
len1 = len(list1)
list2 = []
for i in range(len1):
if i % 2 == 0:
list2.append(list1[i])
print('奇数下标元素为:',list2)
奇数下标元素为: [1, 3, 5]
- 已知一个列表,输出所有元素中,值为奇数的。
list1 = [1,2,3,4,5]
list2 = []
for i in range(len(list1)):
if list1[i] % 2 != 0:
list2.append(list1[i])
print('值为奇数的有:',list2)
值为奇数的有: [1, 3, 5]
- 已知一个列表,将所有元素乘二。
list1 = [1, 2, 3, 4, 5]
list2 = []
for i in range(len(list1)):
list2.append(list1[i] * 2)
print(list2)
[2, 4, 6, 8, 10]
- 已知一个列表,将所有元素加到第一个元素中。
list1 = [1, 2, 3, 4, 5]
sum1 = 0
for i in range(len(list1)):
sum1 += list1[i]
list1.insert(0,sum1)
print(list1)
[15, 1, 2, 3, 4, 5]
- 已知一个列表A,将奇数位置元素存到B列表中,偶数元素存到C列表中。
list1 = [1, 2, 3, 4, 5]
B = []
C = []
for i in range(len(list1)):
if i % 2 == 0:
B.append(list1[i])
else:
C.append(list1[i])
print('奇数列表:',B,'\n','偶数列表:',C)
奇数列表: [1, 3, 5]
偶数列表: [2, 4]
- 把A列表的前5个元素复制到B列表中。
A = [1, 2, 3, 4, 5, 6, 7, 8]
B = []
for i in range(len(A)):
if i <= 4:
B.append(A[i])
print('A列表:',A)
print('B列表:',B)
A列表: [1, 2, 3, 4, 5, 6, 7, 8]
B列表: [1, 2, 3, 4, 5]
- 把1----36分别放入列表中,计算列表数组对角元素之和。6 * 6的列表
sum = 0
list1 = [[0 for _ in range(6)]for _ in range(6)]
for i in range(6):
for j in range(6):
list1[i][j] = i * 6 + j + 1
sum = list1[0][0] + list1[0][5] + list1[5][0] + list1[5][5]
print('对角元素和为',sum)
对角元素和为 74
- 有一个长度是10的列表,列表内有10个不重复的数字,要求按从大到小排序。
list1 = [1, 3, 2, 4, 6, 5, 7, 8, 10, 9]
for i in range(len(list1)-1):
for j in range(i+1, len(list1)):
if list1[i] < list1[j]:
temp = list1[j]
list1[j] = list1[i]
list1[i] = temp
print(list1)
[10, 9, 8, 7, 6, 5, 4, 3, 2, 1]
- 有一个长度是10的列表,要求删除某一个位置的元素
list1 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
p = int(input('请输入要删除第几个元素:'))
del list1[p-1]
print('删除后的列表为:',list1)
请输入要删除第几个元素:2
删除后的列表为: [1, 3, 4, 5, 6, 7, 8, 9, 10]
- 有一个长度是10的列表,按递增排列,用户输入一个数,插入适当位置。
list1 = [1, 2, 3, 4, 5, 6, 11, 8, 9, 10]
num = int(input('请输入要插入的数字:'))
list1.append(num)
for i in range(len(list1)-1):
for j in range(i+1, len(list1)):
if list1[i] > list1[j]:
temp = list1[j]
list1[j] = list1[i]
list1[i] = temp
print(list1)
请输入要插入的数字:7
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]
- 有一个长度是10的列表,数 组内有10个人名,要求去掉重复的
list1 = ['孙悟空', '猪八戒', '沙悟净', '唐僧', '观音', '红孩儿', '孙悟空', '唐僧', '蜘蛛精', '佛祖']
for i in list1[:]:
count = 0
for j in list1[:]:
if i == j:
count += 1
if count > 1:
list1.remove(j)
print(list1)
['猪八戒', '沙悟净', '观音', '红孩儿', '孙悟空', '唐僧', '蜘蛛精', '佛祖']
- 把A列表的第三到第六位之间的元素删除。
A = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
del A[2:5]
print(A)
[1, 2, 6, 7, 8, 9, 10]
- 已知A列表,B列表,定义一个列表C,要求C包含A,B数组中的数据(无重复值)。
A = [1, 2, 3, 4]
B = [3, 4, 5, 6]
C = []
for i in A[:]:
for j in B[:]:
if i == j:
A.remove(i)
C = A + B
print(C)
[1, 2, 3, 4, 5, 6]