Python第一篇

前言

本文作为我开始学习python的系列第一篇。以后会持续更新。

问题:

   春节来临之际,魏璎珞计划宴请众人,包括太后、皇后、纯妃、小嘉嫔、舒妃及皇上。请创建一个存储所有宾客的列表,然后打印出每一个人的名字,并且告诉大家“春节将至,请大家来延禧宫小聚”。由于争宠失败,小嘉嫔不想参加宴会,就让宫女拒绝了,请打印出不参加此次宴会的人的名单。拟定名单时,魏璎珞突然想请尔晴来参加宴会,请重新修改列表,打印出请客名单。
  皇上收到邀请后,感觉魏璎珞的主意特别好,于是特许她在御花园宴请大家。因此魏璎珞可以邀请更多的人了,请使用insert()方法把哥哥放在邀请名单的首位;由于傅恒与魏璎珞的特殊关系,因此请用append()方法把傅恒放在名单最后。请重新打印所有人的名单,并且使用len()函数打印出参加宴会的宾客人数,同时复制一个新的列表备份。明玉看到邀请名单后,先打印了前三个名字,然后又打印查看了后三个人的名字,感觉顺序不对。于是她颠倒了一下顺序。
  宴会开始前,皇上得知傅恒和魏璎珞的关系,于是收回了魏璎珞可以在御花园宴请宾客的命令。魏璎珞不得不把宴请地方重新改为延禧宫,并且为了避嫌,只能宴请两个人:皇后和尔晴。请用pop()方法把名单上的其余人删除,并且告诉他们特别遗憾不能邀请大家吃饭了。然后告诉皇后和尔晴,依然在受邀之列。 宴会开始之后,请使用del语句删除邀请名单。

问题简化完成步骤:

  1. 创建列表
  2. 三种方法打印初始名单
  3. 添加人员后再次修改并打印
  4. 采取insert()和append()方法加入和删改人员并使用len()方法打印人数和列表
  5. 打印前三个和后三个人员名单,并调换位置
  6. 删除指定人员,留下部分人员
  7. 删除表格

按步骤完成:

三种方法打印

pyhton中提供了for循环打印、print直接打印和根据下标逐个打印:

name_join = ["太后","皇后","纯妃","小嘉嫔","舒妃","皇上"]
#创建列表

#建立输出
print("第一种输出:",name_join)
print("第二种输出:")
for i in name_join :
    print(i)
print("第三种输出\n",name_join[0])
print(name_join[1])
print(name_join[2])
print(name_join[3])
print(name_join[4])
print(name_join[5])

列表修改

鉴于列表的修改有重复性,这里在第三步、第四步、第五步中只选择第四步骤进行演示操作:

#采取insert()和append()方法加入和删改人员并使用len()方法打印人数和列表
name_join.insert(0,"哥哥")
name_join.append("傅恒")
print("参与人数有:",len(name_join))
print("第二次修改后参加人员为:",name_join)

列表删除

第六步中涉及到问题是如何在删除列表元素的时候保护不需要删除的元素。有一种简便的方法就是根据下标一个一个删除:

#删除指定人员,留下部分人员的第一种方法
name_join.pop(0)
name_join.pop(1)
name_join.pop(1)
name_join.pop(1)
name_join.pop(2)
name_join.pop(2)
print(name_join)

输出结果:
输出结果1
但是为了代码进行自动运算和减少误差,这里尝试采用循环进行解决,第一次选择for循环和continue结合进行初步尝试:

#删除指定人员,留下部分人员的循环第一次尝试
for i in name_join:
    if i is name_join[name_join.index("尔晴")]:
        continue
    elif i is name_join[name_join.index("皇后")]:
        continue
    elif 1:
        name_join.pop(name_join.index(i))
print("剩余参与人:",name_join)

输出结果:
错误输出结果1
显然结果存在错误,最后发现问题出现在for循环机制内:i变量在for的整体循环中是持续变化,如“尔晴”,在for第一次循环中,“尔晴”的下标索引值为1,i变量的指向值为name_join[0];在for的第二次循环中,“尔晴”的下标索引值变化为0,i变量的指向却是name_join[1],两种循环产生错位。二次更改后:

#删除指定人员,留下部分人员的循环第二次尝试
for i in name_join:
    for j in name_join:
        if j is name_join[name_join.index("尔晴")]:
            continue
        elif j is name_join[name_join.index("皇后")]:
            continue
        elif 1:
            name_join.pop(name_join.index(j))
print("剩余参与人:",name_join)

输出结果:
循环输出结果
此时结果正确。

删除表格

删除表格采取del()方法:

#删除表格
del name_join

最终输出

结果如下:

第一种输出: ['太后', '皇后', '纯妃', '小嘉嫔', '舒妃', '皇上']
第二种输出:
太后
皇后
纯妃
小嘉嫔
舒妃
皇上
第三种输出
 太后
皇后
纯妃
小嘉嫔
舒妃
皇上

不能参加的人是: 小嘉嫔
第一次修改后的参会人员: ['太后', '皇后', '纯妃', '舒妃', '皇上', '尔晴']

参与人数有: 8
第二次修改后参加人员为: ['哥哥', '太后', '皇后', '纯妃', '舒妃', '皇上', '尔晴', '傅恒']

前三个人员名字为: ['哥哥', '太后', '皇后']
后三个人员名字为: ['舒妃', '皇上', '尔晴']
反转后 ['傅恒', '尔晴', '皇上', '舒妃', '纯妃', '皇后', '太后', '哥哥']

剩余参与人: ['尔晴', '皇后']

总结

列表的添加删改等操作难度较低,在for循环操作中,i变量的变化和循环所需的列表变化有可能产生程序表面上的合理性,但会导致循环结果错误。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值