Day.03
2020.02.21
今天依然是通过上述的三种途径进行python的学习。在日常学习过程中,我个人认为网课和骆昊的百天项目结合起来学习是比较有效果的,而牛客网的python3教程则更像是一本常备的参考书,如果在练习过程中需要用到某些函数某些知识的话,可以快速查阅相关资料,在运用中丰富自己的知识。如果只是对着教程书硬看硬记的话,一来记不住什么东西,二来也感受不到编程带来的乐趣。今天主要学习了以下几个方面的知识:
1.字符串
首先通过视频网课,具体讲解了字符串的各种处理方法以及字符串常用函数。首先是输入与输出,在第一天的时候已经提到了变量的格式化输出,这是这一块最重要的内容,当然,也只需要记住第一天表格中的四个常用格式化方式即可,其次是下标与切片操作,字符串、元组、列表均支持切片,具体语法是:[起始:结束:步长],唯一需要特别注意的一点是,起始和结束这两个下标用数学的话来讲是左闭右开区间,或者说结束下标减去起始下标就是所得字符串的长度,直接从起始下标开始数就行了。最后是字符串的常用函数,这里有很多,记肯定是记不住的,只有在实战中慢慢运用起来才会熟练。具体的函数和方法可以参考菜鸟教程或者牛客网的教程,这里就不写了。
其中要注意的是join函数,如果是在原字符串中插入一个新字符串,则是在原字符串的每个字符后面插入(包括空格),如果是示例里的列表中插入一个新字符串,则是在列表的每个元素后面插入。
在字符串这里有一个小知识:我们都知道在字符串中,反斜杠\表示转义,但是如果不希望字符串中的\表示转义,我们可以通过在字符串的最前面加上字母r来加以说明。
此外,从牛客网的python3教程中还了解到了一个对后期比较重要的知识:python三引号允许一个字符串跨多行,字符串中可以包含换行符、制表符以及其他特殊字符,实例如下:
#python三引号的实例
para_str = """这是一个多行字符串的实例
多行字符串可以使用制表符
TAB ( \t )。
也可以使用换行符 [ \n ]。
"""
print (para_str)
#测试结果:
#这是一个多行字符串的实例
#多行字符串可以使用制表符
#TAB ( )。
#也可以使用换行符 [
# ]。
同样的,通过相应练习题来巩固字符串的学习:
#练习题1:计算字符串'i love python'中子串o出现的次数
#具体实现方法:
str1 = 'i love python'
print(str1.count('o'))
#测试结果:
#2
小结:使用自带的count函数寻找子串个数非常方便,相比C++来说要简单不少,但是python的缺点是容易超时,PAT考试的时候还是要用C++刷题。
#练习题2:从键盘输入一个字符串,将小写字母全部转换成大写字母
#具体实现方法:
str1 = 'i love python'
print(str1.upper())
#测试结果:
#I LOVE PYTHON
小结:同样也是比C++简便不少,C++需要导入相应的库。
2.分支结构
分支结构也就是昨天说到的条件语句,主要的关键字是:if…elif…else…,可以用于判别用户的密码是否正确,或者分段函数求值等等。分支结构中也可以再进行嵌套(套娃),但是并不提倡,因为严重影响了代码的可读性。
因为昨天已经基本了解了if…elif…else…语句的编写,今天直接通过三个练习题进行练习:
#练习题1:英制单位英寸与公制单位厘米互换
#提示:1英寸=2.54厘米
#具体实现方法:
print('英寸厘米互换:')
while(1):
print('英寸到厘米输入0,厘米到英寸输入1,输入其他数退出')
jud = input()
judge = int(jud)
if judge == 0:
print('请输入多少英寸:')
yingcun = int(input())
limi = 2.54*yingcun
print('%.2f英寸=%.2f厘米'%(yingcun,limi))
elif judge == 1:
print('请输入多少厘米:')
limi = int(input())
yingcun = limi/2.54
print('%.2f厘米=%.2f英寸'%(limi,yingcun))
else:
break
#测试结果:
#英寸厘米互换:
#英寸到厘米输入0,厘米到英寸输入1,输入其他数退出
#0
#请输入多少英寸:
#1
#1.00英寸=2.54厘米
#英寸到厘米输入0,厘米到英寸输入1,输入其他数退出
#1
#请输入多少厘米:
#1
#1.00厘米=0.39英寸
#英寸到厘米输入0,厘米到英寸输入1,输入其他数退出
#2
#Process finished with exit code 0
小结:这题和昨天的华氏度摄氏度转换一模一样,直接套模型就行。
#练习题2:百分制成绩转换为等级制成绩
#要求:如果输入的成绩在90分以上(含90分)输出A;
#80分-90分(不含90分)输出B;
#70分-80分(不含80分)输出C;
#60分-70分(不含70分)输出D;
#60分以下输出E.
#具体实现方法:
print('百分制转等级制:')
while(1):
chengji = int(input('请输入百分制的成绩:'))
if chengji >= 90:
print('%d分对应的等级是A'%chengji)
elif 80 <= chengji < 90: #elif chengji >= 80 即可,以下同理
print('%d分对应的等级是B'%chengji)
elif 70 <= chengji < 80:
print('%d分对应的等级是C'%chengji)
elif 60 <= chengji < 70:
print('%d分对应的等级是D'%chengji)
else:
print('%d分对应的等级是E'%chengji)
#测试结果:
#百分制转等级制:
#请输入百分制的成绩:100
#100分对应的等级是A
#请输入百分制的成绩:90
#90分对应的等级是A
#请输入百分制的成绩:89
#89分对应的等级是B
#请输入百分制的成绩:75
#75分对应的等级是C
#请输入百分制的成绩:60
#60分对应的等级是D
#请输入百分制的成绩:59
#59分对应的等级是E
#请输入百分制的成绩:
#Process finished with exit code -1
小结:首先,通过编写代码的训练,学习到了更加简练的获得键盘输入数据的方式(比如int(input(‘请输入百分比成绩:’)),然后直接赋值给变量chengji),此外,在编写条件语句的时候,PyCharm也用长长的黄色波浪线提示:simplify chained comparison,也就是说,python中可以像数学不等式一样写,不用在中间写and的逻辑语句。
#练习题3:输入三条边长,如果能构成三角形就计算周长和面积
#提示:海伦公式:S=√p(p-a)(p-b)(p-c),其中,p为半周长
#具体实现方法:
while(1):
print('请输入三条边长:')
a = int(input('a=')) #应该写成 a = float(input('a=')) 以下同理
b = int(input('b='))
c = int(input('c='))
if a+b>c and a+c>b and b+c>a :
C = a+b+c
p = C/2
S = (p*(p-a)*(p-b)*(p-c))**0.5
print('其构成三角形的周长为%.2f,面积为%.2f'%(C,S))
else:
print('这三条边无法构成三角形,请重新输入')
#测试结果:
#请输入三条边长:
#a=3
#b=4
#c=5
#其构成三角形的周长为12.00,面积为6.00
#请输入三条边长:
#a=1
#b=2
#c=5
#这三条边无法构成三角形,请重新输入
#请输入三条边长:
#a=
#Process finished with exit code -1
小结:一开始碰到开根号还楞了一下,不知道python中该用什么函数,后来突然想起来运算符**代表的是幂运算,1/2次幂就是开根号。
3.今日总结
通过这三天的代码练习,可以明显感觉到代码趋于简练并且可读性大大增加。但是还是有很多地方需要改进,比如分支结构的练习题2,其实elif后面的条件已经可以不用写小于多少了,因为跳到这个elif条件的判定时,已经默认小于那个值了。又比如分支结构的练习题3,为了使计算的范围更广,从键盘读入的a、b、c三条边长的值应该强制类型转换为float型,而不是int型(我这么写的话读入的a、b、c只能输入整数,输入小数就会报错),可能是在C++中习惯了写int型和double型,还没有真正适应过来,还需要进一步的努力才行。