Day 7 列表和字符串

pass–程序占位符

break & continue

  • break 在双层循环中,break只能结束当前层的循环
  • continue 结束当前这一次循环,重新判断条件,开启下一次循环
  • 两者只能用在循环中

序列

开发中用得最多的是列表、字符串、字典,元组集合用得比较少

列表

列表的定义

list1 = [1,2,"3",4] #元素可以是任意合法类型
list2 = []    #空列表
list3 = list()  #list是系统函数,用于创建列表
list4 = list("abc")   #list也可以将其他类型转换成列表

列表的遍历

list1 = [1,2,3,4,11,23,445]
i = 0
while i < len(list1):
    print(list1[i],end=" ")
    i += 1
   
for value in list1:
	prnit(value)    #不能通过修改value来修改元素值,修改要通过下标

for index,value in enumerate(list):  #enumerate()将列表转化成索引+值
    print(index,value)

通过range来修改列表的值(熟练掌握)

  • 80%都用range,次数不定的才用while
  • range(start,end,step) 包头不包尾 ,start默认值是0,step默认1,range(5)相当于range(0,5,1)
  • 使用range构造下标,如:range(1,100)
# 构造了一个0,1,2...len(list1)-1的列表下标
  for i in range(len(list1)):
  	list1[i] += 50
  print(list1)

列表通用操作

  • 拼接 把两个列表拼接成一个新列表(少有的列表整体操作)
    res = list1+list2 ,拼接有先后顺序,原列表不变
  • 重复 重复生成新列表
    res = list1*3 重复3次
  • 成员判断(in)判断一个元素是否出现在列表中,True或者False
  • 成员判断(not in)判断一个元素是否不出现在列表中,True或者False
  • len获取元素个数
  • 列表统计函数
    min(list1),max(list1),sum(list1)
  • 切片运算
    list1[start🔚step] start默认值是0,end默认值是列表长度,step正数表示从左往右切,负数表示从右往左切,默认是1
    list1[start:end]包头不包尾
    list1[0:5:2] list1[:]
    list1[:-5:-3] 从右向左切,start默认是-1

列表的增删改查反转排序

  • 列表的末尾加一 list1.append(“5”)
  • 列表的末尾加多 list1.extend([60,70,80]) # 参数必须是可迭代元素(能够遍历的)
  • 列表任意位置插入元素 list1.insert(i,obj) #i插入位置的下标,原来的元素自动后移 list1.insert(5,“abc”),在下标为5的位置插入“abc"
  • 删除某下标元素 list1.pop(i),不带参数默认删除最后一个
  • 按值删除元素 list1.remove(10),不存在该值会报错
    批量删除
# 删除所有90
while 90 in list1:
	list1.remove(90)
	
# 保留一个90,其他删除
while 90 in list1 and list1.count(90) > 1:
	list1.remove(90)
  • 清空列表 list1.clear()

  • 查询 list1.index(x,start,end) #返回下标否则报错

  • 列表反转 list1.reverse()

  • 排序 list1.sort() #默认升序 list1.sort(reverse=True)降序排列

    作业

    一、填空
    1.表达式[1, 2, 3]*3的值为 [1,2,3,1,2,3,1,2,3]
    2.表达式3 in [1, 2, 3, 4]的值为__True__。
    表达式“[3] in [1, 2, 3, 4]”的值为_False_。
    3.使用列表与整数的乘法生成包含10个数字5的列表,可以写为__[5]*10________。
    4.任意长度的非空列表中最后⼀一个元素的下标为__-1________。
    5.表达式list(range(1, 10, 3))的值为 [1,4,7]
    表达式list(range(10, 1, -3))的值为__[10,7,4]________。
    表达式list(range(5))的值为
    [0,1,2,3,4]
    ____。
    6.列表的__remove_方法删除⾸首次出现的指定元素,如果列列表中不不存在要删除的元素,则抛出异常。
    7.假设列列表对象a的值为[3, 4, 5, 6, 7, 9, 11, 13, 15, 17],那么切⽚片:

  • 步长为负数,切片方向由右到左,结果也是由右到左排列
    a[3:7] = [6,7,9,11]________________;
    a[:5:2] =
    [3,5,7]
    a[-5:] = [9,11,13,15,17]

    a[-7:-2:2] =
    [6,9.13]_____________
    a[:5:-1] = [17,15,13,11]__________
    a[8:-9:-1] = [15,13,11,9,7,6,5]________
    8.已知a = [7,3,4],则a.sort(reverse=True),则a = [7,4,3]____________
    9.已知a = [7,3,4,9,10,3,12,3,17],执⾏a.pop()后,a=[7,3,4,9,10,3,12,3];执⾏a.pop(0)
    后,a=
    [3,4,9,10,3,12,3]
    ;执行a.remove(3)后,a=[4,9,10,3,12,3];执⾏del a[:2]后,
    a=
    [10,3,12,3]
    ___
    10.已知a = [1,2,3],执⾏a.insert(1,4)后,a = [1,4,2,3];执行a.append(10)后,a
    = [1,4,2,3,10]______;执⾏a.extend([20,30])后,a = [1,4,2,3,10,20,30]
    _____

二、

# ---coding:utf-8----
# 文件名: 作业.py
# @Time:2020/1/14 15:58
# ⼀、列表
# 1.不使⽤列表的index函数,⾃⼰写程序查找指定元素
# •要查找的元素从键盘输入
# •默认从左向右查找,找到第一个元素就停⽌
a = ["a", 1, 2, 3, 4, 5, 6, 7, 8]
e = input("请输入要查找的元素:")
if type(eval(e)) == int or type(eval(e)) == float:
    e = eval(e)
else:
    e = e

for x, y in enumerate(a):
    if y == e:
        print("找到了,下标为%d" % (x) )
        exit()
print("没有这样的元素")

# 2.自定义一个数字列表,求列表中所有偶数元素的和
sum = 0
a = range(0,101)
for i in a:
    if i % 2 == 0:
        sum += i
print(sum)

# 3.B哥去参加青年歌手⼤奖赛,有10个评委打分,去掉一个最⾼一个最低,求平均分

a = list(range(10))
a = [7,6,5,4,5,6,7,8,10,10]
a.remove(min(a))
a.remove(max(a))
print(a)
print(sum(a)/len(a))

# 4.给定一个列表:将列表中指定的某个元素全部删除
a = [1,2,3,4,5,6,1,2,3,4,5,6]
num = eval(input("请输入要删除的数(1,2,3,4,5,6):"))
for x in a:
    if x == num:
        a.remove(x)
print(a)

# 5.输入某年某月某日,判断这一天是这一年的第几天
# -要考虑闰年
year, month, day = eval(input("请输入年月日,用逗号隔开:"))
monthList = [31,29,31,30,31,30,31,31,30,31,30,31]
if (year % 4 == 0 and year % 100 !=0) or year % 400 == 0:
    print("这是闰年%d第%d天" % (year, sum(monthList[0:month-1])+day))
elif month>2:
    print("这是平年%d第%d天" % (year, sum(monthList[0:month-1])+day-1))
else:
    print("这是平年%d第%d天" % (year, sum(monthList[0:month-1])+day))

# 二、循环
# 1.猜数字
# 从键盘上输入一个整数,如果等于你规定的整数,就猜中了,如果小于规定的数,
# 提示“⼩了”,否则提示“大了”,直到猜中位置
a = 5
while True:
    num = eval(input("请输入一个整数:"))
    if num == a:
        print("猜中了")
        exit()
    elif num > a:
        print("大了")
        continue
    else:
        print("小了")
        continue

# 2.打印图形(使⽤循环)
#     *
#    ***
#   *****
#  *******
# n=4时的三⻆角形
i = 1
num = eval(input("请输入一个整数:"))
while i <= num:   #尽量用for
    print(" "*(num-i), "*"*(2*i-1))
    i += 1

# 3.python1904班有10个同学,请你设计一个程序输⼊每个同学的测验成绩,总成绩和平均成绩
i = 1
number = 10
list1 = []
while i <= 10:
    grade = eval(input("请输入同学的测验成绩:"))
    list1.append(grade)
    i += 1
print("十位同学的总成绩是%d,平均成绩是%d。" % (sum(list1),sum(list1)/len(list1)))

# 4.四则计算器,从键盘输⼊入两个数和一个运算符(+-*/),根据运算符计算表达式的结果。
# 提示:请考虑除数为0的情况
#循环如何应用?如何合理退出程序?
i = 0
while True:

    num1, num2 = eval(input("请输入两个数,用逗号隔开:"))
    operator = input("请输入加减乘除运算符(+-*/):")

    if operator == "+":
        print("计算结果是:%d" % (num1+num2))
    if operator == "-":
        print("计算结果是:%d" % (num1 - num2))
    if operator == "*":
        print("计算结果是:%" % (num1 * num2))
    if operator == "/":
        if num2 != 0:
            print("计算结果是:%d" % (num1 / num2))
        else:
            print("除数不能为0")
# version 2
```python
while True:
    num1 = input("请输入第一个数,退出输入Q:")
    if num1 == 'Q':
        break
    else:
        num1 = eval(num1)

    num2 = input("请输入第二个数,退出输入Q:")
    if num2 == 'Q':
        break
    else:
        num2 = eval(num2)

    print(type(num1), type(num2))

    operator = input("请输入加减乘除运算符(+-*/),退出输入Q:")
    if operator == "Q":
        break
    if operator == "+":
        print("计算结果是" + str(num1+num2))
    if operator == "-":
        print("计算结果是"+ str(num1 - num2))
    if operator == "*":
        print("计算结果是" + str(num1 * num2))
    if operator == "/":
        if num2 == 0:
            print("除数不能为0")
        else:
            print("计算结果是" + str(num1 / num2))

5.求1000以内的素数。

number = list(range(2, 1001))
suShu = []

for x in number:
i = 2
while i < x:
if x % i == 0:
break
i += 1
else:
suShu.append(x)
print(suShu)

number = list(range(2, 1001)) #去掉本行
for x in number: # 改成:for x in range(2,1000)
i = 2
while i < x:
if x % i == 0:
break
i += 1
else:
print(x, end=",")

6.输出1000以内的所有水仙花数。

number = list(range(1, 1001))
for x in number:
qian = x // 1000
bai = x % 1000 // 100
shi = x // 10 % 10
ge = x % 100 % 10
if qian3+bai3+shi3+ge3 == x:
print(x)


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值