python创建一个列表、用于存储同学姓名_python学习日记04,Python

本文记录了Python学习中的列表操作和循环结构应用,包括列表的创建、元素的添加、删除和查找,以及for循环的使用。通过实例展示了如何创建一个存储同学姓名的列表,并进行遍历和添加教师姓名。还介绍了素数判断和求最大公约数与最小公倍数的练习,强调了变量命名和理解语言特性的重要性。
摘要由CSDN通过智能技术生成

Day.04

2020.02.22

今天学习的内容还是比较基础的,主要是列表和循环结构的运用。

1.列表

在之前的学习过程中,我已经初步了解了列表的使用方法,包括切片、更新、删除等等操作,我觉得其中比较重要的一个点就是列表和元组之间的区别,列表中的元素是可以更改的,而元组不行。列表的查找和截取方式也和字符串一样(类比于C++中数组的下标查找),通过方括号[]进行,但是添加元素和删除元素的方式有所不同。

修改列表元素:直接通过下标查找然后进行赋值即可;

添加元素(在末尾):通过list.append(‘x’)将元素’x’放在原列表list的最后,需要注意的是,也可以用append()动态创建列表;

插入元素:通过list.insert(4,‘x’)将元素’x’插入在下标为4的位置;

删除元素:①使用pop()删除(默认是最后一个元素),同时也可以指定元素索引,并且返回该元素的值;②使用del语句删除,此时需要知道要删除的元素在列表中的位置,元素一旦被删除之后就无法再访问;③使用remove()删除,这种方法适用于不知道元素索引,只知道元素值的时候。

查找元素:①in:存在为True,不存在为False;②not in:存在为True,不存在为False。

具体的函数和方法可以参考

菜鸟教程

或者

牛客网的教程

,这里就不写了。

以下是今天的列表练习题:

#练习题1:创建一个列表,用于存储同学姓名,依次访问该列表中的元素

#并且将老师和班主任的姓名添加至列表的开头和末尾

#要求:将每个同学的姓名打印出来,并且添加一句问候语

#具体实现方法:

list = ['叶扬', '张家铭', '姚霖', '朱子恒']

print(list)

list.append('陈佳舟')

list.insert(0,'陈菲')

print(list)

for x in range(len(list)):

if x == 0 or x == len(list)-1: #这里一开始没-1但是并没有报错

print('%s老师好!'%list[x])

else:

print('%s同学好!'%list[x])

#测试结果:

#['叶扬', '张家铭', '姚霖', '朱子恒']

#['陈菲', '叶扬', '张家铭', '姚霖', '朱子恒', '陈佳舟']

#陈菲老师好!

#叶扬同学好!

#张家铭同学好!

#姚霖同学好!

#朱子恒同学好!

#陈佳舟老师好!

小结:这里输出问候语使用了for…in…的循环结构,in后面不用range()也行,也可以直接跟列表list,但是我个人认为使用range()作为下标给x,后续的使用和理解都更加方便。还有一个在编写过程中发现的问题是,python似乎不存在对列表访问出错的情况,因为一开始在if条件语句中写了x == len(list),那么x=6的时候其实是没有的,但是程序并没有报错,输出的是“陈佳舟同学好!”,而如果在C++中试图访问超过数组长度的数据的话,会提示错误。

2.循环结构

循环结构在前几天已经开始着手应用,主要写的是while循环,今天又学习了python中的for循环。其中,while循环用法和C++几乎是一模一样的,在这里不过多阐述,for循环其实本质上也是和C++一样的,只不过写法不同。range()函数中可以规定区间和步长,这和字符串的切片用法一样,区间也是左闭右开的,此外,range()也可以直接用来创建一个列表。还有一个是pass语句,其作用主要是为了保持程序结构的完整性,本身是一个空语句,这也让我联想到了51单片机中的NOP指令,通常用来延时一个指令周期,防止按键抖动等等。

同样的,通过骆昊百天项目进行练习以加深印象:

#练习题1:输入一个正整数判断是不是素数

#提示:素数指的是只能被1和自身整除的大于1的整数

#具体实现方法:

print('素数判断')

while 1:

x = int(input('请输入一个正整数:'))

count = 0

for y in range(1, x+1):

if x % y == 0:

count += 1

if count == 2:

print('%d是素数' % x)

else:

print('%d不是素数' % x)

#测试结果:

#素数判断

#请输入一个正整数:1

#1不是素数

#请输入一个正整数:2

#2是素数

#请输入一个正整数:3

#3是素数

#请输入一个正整数:4

#4不是素数

#请输入一个正整数:5

#5是素数

#请输入一个正整数:6

#6不是素数

#请输入一个正整数:7

#7是素数

#请输入一个正整数:

#Process finished with exit code -1

小结:在运用range()函数的时候还是会经常忘记左闭右开区间的规则,今后要更加注意这一点。

#练习题2:输入两个正整数,计算它们的最大公约数和最小公倍数

#提示:用辗转相除法求最大公约数比较简单

#最大公约数×最小公倍数=两个正整数之积

#具体实现方法:

print('计算两个正整数的最大公约数和最小公倍数:')

while 1:

x = int(input('请输入一个正整数:'))

y = int(input('请输入另一个正整数:'))

chushu = y

yushu = x % chushu

while 1:

if yushu == 0:

print('%d和%d的最大公约数是%d' % (x, y, chushu))

print('%d和%d的最小公倍数是%d' % (x, y, (x*y)/chushu))

break

else:

beichushu = chushu

chushu = yushu

yushu = beichushu % chushu

#测试结果:

#计算两个正整数的最大公约数和最小公倍数:

#请输入一个正整数:2

#请输入另一个正整数:6

#2和6的最大公约数是2

#2和6的最小公倍数是6

#请输入一个正整数:36

#请输入另一个正整数:270

#36和270的最大公约数是18

#36和270的最小公倍数是540

#请输入一个正整数:18

#请输入另一个正整数:20

#18和20的最大公约数是2

#18和20的最小公倍数是180

#请输入一个正整数:

#Process finished with exit code -1

小结:在用辗转相除法求最大公约数的时候浪费了大量时间,个人认为主要是以下原因:变量命名随意,碰到个新变量就命名为temp1、temp2,这无疑增加了自己逻辑思考的时间,后来用被除数、除数、余数三个关键变量进行命名,问题便迎刃而解了。由此可见,友好的变量名字既有利于他人的阅读,又有利于自己的思考。

#练习题3:打印如下所示的三角形图案

#*

#**

#***

#****

#*****

# *

# **

# ***

# ****

#*****

# *

# ***

# *****

# *******

#*********

#具体实现方法:

str = '*'

for x in range(1,6):

print(str*x)

print('\n')

for y in range(1,6):

print((str*y).rjust(5))

print('\n')

for z in range(1,10,2):

print((str*z).center(9))

#测试结果:

#*

#**

#***

#****

#*****

# *

# **

# ***

# ****

#*****

# *

# ***

# *****

# *******

#*********

小结:这一题比较简单,直接运用字符串函数中相应的左右对齐和居中函数即可,其中,第三问打印奇数个字符*可以直接在range()函数中设置步长为2。

3.今日总结

不一样的语言,一样的配方,做最大公约数的时候我又回想起了两年前被C++支配的恐惧。总的来说,还是要多练习吧,python中没有了变量的声明,为自己的逻辑思考带来了巨大的方便(如果实在想不明白还是建议先画一个流程图,再写程序就十分简单了)。此外,在查资料的过程中,也发现了print()打印时,加号+和逗号,之间的区别:

‘+’号是进行拼接,参与’+'的参数类型必须是同类型的数据(变量之间无空格);

‘,’ 号是将变量分隔开,可以是不同类型的数据(变量之间有空格)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值