Python基础随笔一(MOOC)
Python基础随笔①(MOOC)
前言
本文材料均来自于MOOC的免费课程Python程序设计(https://www.icourse163.org/course/BIT-268001)
python基础的随笔更多是偏向于我个人代码实现和讨论,所以对于知识点不会有一个比较输入的说明,知识点可能会在之后系列再做总结。如果后面总结知识点我大概率会手打,截图属实起不到加强记忆的效果,如果可以我会尽量做一个知识点目录(同参考课程进度)
概述
有这次的①包含有从0-3周课程的代码实例,也包括Python123里的作业部分实例代码,以及运行结果。总体描述方式就是类似下图
主体
1.基本语法元素
①实例:温度转换
要求
实现华摄氏度(F)与摄氏度(C)的转换
自动根据最后的符号判断输入的是什么类型的温度计量并转换
分析
题设要求有对于两个单位之间的转换以及识别
所以会用到两者之间的转换公式。
摄氏=5/9(°F-32)
华氏°F=℃×9/5+32
对于单位的F和C的识别要通过最后一个字符的识别来进行判断。
输入设定变量[-1]
代码部分
TempStr = input("请输入带有符号的温度值: ") if TempStr[-1] in ['F', 'f']: C = (eval(TempStr[0:-1]) - 32)/1.8 print("转换后的温度是{:.2f}C".format(C)) elif TempStr[-1] in ['C', 'c']: F = 1.8*eval(TempStr[0:-1]) + 32 print("转换后的温度是{:.2f}F".format(F)) else: print("输入格式错误")
运行结果
摄氏度转华氏度
请输入带有符号的温度值: 12C 转换后的温度是53.60F
华氏度转摄氏度
请输入带有符号的温度值: 53F 转换后的温度是11.67C
②作业:Hello World的条件输出
要求
获得用户输入的一个整数,参考该整数值,打印输出"Hello World",要求:
如果输入值是0,直接输出"Hello World"
如果输入值大于0,以两个字符一行方式输出"Hello World"(空格也是字符)
如果输入值小于0,以垂直方式输出"Hello World"
分析
这里的要求就是条件判断决定走哪一条分支,一共三条,流程图如下:(UML建模的基础图,这里就不按照严格的画法和描述了)
代码
n = eval(input()) if n == 0: print("Hello World") elif n > 0: print("He\nll\no \nWo\nrl\nd") else: for c in "Hello World": print(c)
运行结果
输入>0,每两个字符进行一次换行
1 He ll o Wo rl d 进程已结束,退出代码0
输入0,直接输出
0 Hello World 进程已结束,退出代码0
输入<0,垂直输出
-1 H e l l o W o r l d 进程已结束,退出代码0
③作业:数值运算
要求
获得用户输入的一个字符串,格式如下:
M OP N
其中,M和N是任何数字,OP代表一种操作,表示为如下四种:+, -, *, /(加减乘除)
根据OP,输出M OP N的运算结果,统一保存小数点后2位。
注意:M和OP、OP和N之间可以存在多个空格,不考虑输入错误情况。
示例:
输入 | 输出 |
---|---|
10+100 | 110.00 |
1/20 | 0.05 |
分析
简单的计算
保留小数点后两位
{:.2f}
代码
a=input() print("{:.2f}".format(eval(a)))
运行结果
10+100 110.00 进程已结束,退出代码0
1/20 0.05 进程已结束,退出代码0
2.基本图形绘制
①实例:蟒蛇绘制
要求
绘制一条蟒蛇
分析
利用Python的turtle库进行绘图
准备工作:需要下载turtle库
步骤(win10):
①win+r
②输入cmd,进入命令行界面
③输入 pip install turtle
后面需要什么库就把后面的换成库的名字,如果下载速度很慢可以从国内的镜像下载
临时使用:
可以在使用pip的时候加参数-i https://pypi.tuna.tsinghua.edu.cn/simple
例如:pip install -i https://pypi.tuna.tsinghua.edu.cn/simple 库名,
这样就会从清华这边的镜像去安装库。
永久修改办法:
windows下,直接在user目录中创建一个pip目录,如:C:\Users\xx\pip,新建文件pip.ini,内容如下
[global]
index-url = https://pypi.tuna.tsinghua.edu.cn/simple
这个方法也是来自于csdn的帖子解决pip install 速度很慢的方法
代码
import turtle turtle.setup(650,350,200,200) turtle.penup() turtle.fd(-250) turtle.pendown() turtle.pensize(25) turtle.pencolor("purple") turtle.seth(-40) for i in range(4): turtle.circle(40,80) turtle.circle(-40,80) turtle.circle(40,80/2) turtle.fd(40) turtle.circle(16,180) turtle.fd(40*2/3) turtle.done()
运行结果
这个过程是动态的而不是一瞬间呈现结果,展现给我们的是绘制的全过程
②作业:turtle八边形绘制
要求
使用turtle库,绘制一个八边形。
八边形效果如下:
分析
这种规范图形需要计算转角度数就行了,这里就是
360/8=45
旋转8次45度,每次行进一定距离,这里设定100
代码
import turtle as t t.pensize(2) for i in range(8): t.fd(100) t.left(45)
运行结果
③作业:turtle绘制8角形
要求
使用turtle库,绘制一个八角图形。
代码
import turtle as t t.pensize(2) for i in range(8): t.fd(150) t.left(135)
计算循环和角度的乘积,应该为360的整数倍
运行结果
3.基本数据类型
①实例:天天向上的力量-工作日的努力
问题
- 工作日模式要努力到什么水平,才能和每天努力1%一样?
- A君:一年365天,每天进步1%,不停歇
- B君:一年365天,每周工作5天休息2天,休息日下降1%,要多努力呢?
分析
我们可以先计算A君最后的效果
老师给出的方法是利用计算机的计算力直接试错
代码
试错方式的代码:
def dayUP(df): dayup = 1 for i in range(365): if i % 7 in [6,0]: dayup = dayup*(1 - 0.01) else: dayup = dayup*(1 + df) return dayup dayfactor = 0.01 while dayUP(dayfactor) < 37.78: dayfactor += 0.001 print("工作日的努力参数是:{:.3f} ".format(dayfactor))
运行结果
工作日的努力参数是:0.019 进程已结束,退出代码0
②实例:文本进度条-简答的开始
要求
进行简单的进度条模拟,不进行动态刷新采用向下推进
代码
import time scale = 10 print("------执行开始------") for i in range(scale+1): a = '*' * i b = '.' * (scale - i) c = (i/scale)*100 print("{:^3.0f}%[{}->{}]".format(c,a,b)) time.sleep(0.1) print("------执行结束------")
运行结果
------执行开始------ 0 %[->..........] 10 %[*->.........] 20 %[**->........] 30 %[***->.......] 40 %[****->......] 50 %[*****->.....] 60 %[******->....] 70 %[*******->...] 80 %[********->..] 90 %[*********->.] 100%[**********->] ------执行结束------ 进程已结束,退出代码0
③实例:文本进度条-完整版
要求
动态刷新,只在该行进行系列刷新活动
分析
基于简单版本需要都与一部分的文本进行覆盖操作
代码
import time scale = 50 print("执行开始".center(scale//2, "-")) start = time.perf_counter() for i in range(scale+1): a = '*' * i b = '.' * (scale - i) c = (i/scale)*100 dur = time.perf_counter() - start print("\r{:^3.0f}%[{}->{}]{:.2f}s".format(c,a,b,dur),end='') time.sleep(0.1) print("\n"+"执行结束".center(scale//2,'-'))
运行结果
-----------执行开始---------- 100%[**************************************************->]5.00s -----------执行结束---------- 进程已结束,退出代码0
④作业:平方根格式化
要求
获得用户输入的一个整数a,计算a的平方根,保留小数点后3位,并打印输出。
输出结果采用宽度30个字符、右对齐输出、多余字符采用加号(+)填充。
如果结果超过30个字符,则以结果宽度为准。
分析
本题需理解格式化输出的方法。
注意:如果平凡根后产生一个复数,由于复数的实部和虚部都是浮点数,.3f可以将实部和虚部分别取三位小数。
代码
a = eval(input()) print("{:+>30.3f}".format(pow(a, 0.5)))
运行结果
232 ++++++++++++++++++++++++15.232 进程已结束,退出代码0
-232 +++++++++++++++++0.000+15.232j 进程已结束,退出代码0
⑤作业:字符串分段组合
要求
获得输入的一个字符串s,以字符减号(-)分割s,将其中首尾两段用加号(+)组合后输出。
输入 | 输出 |
---|---|
Alice-Bob-Charis-David-Eric-Flurry | Alice+Flurry |
分析
s.split(k)以k为标记分割s,产生一个列表。本题需求就是掌握split()的用法。
代码
s = input() ls = s.split("-") print("{}+{}".format(ls[0], ls[-1]))
运行结果
Alice-Bob-Charis-David-Eric-Flurry Alice+Flurry 进程已结束,退出代码0
后注
这三章的代码难度不是很,也不是很长,但是对于部分函数的使用还是有着一定要求的,或许不使用函数也有写发但是使用函数毫无疑问会大大降低代码量。但是有时候我也很疑惑,因为以前也曾听过代码的使用月是使用一些函数的时候可能会使得这程序耗费的时间增加,以及程序出错之后不知道原因在哪。这很致命。比如再分割字符串的实例里面的split()函数,我查阅了它的源码。
如下:
public String[] split(String regex, int limit) { /* fastpath if the regex is a (1)one-char String and this character is not one of the RegEx's meta characters ".$|()[{^?*+\\", or (2)two-char String and the first char is the backslash and the second is not the ascii digit or ascii letter. */ char ch = 0; if (((regex.value.length == 1 && ".$|()[{^?*+\\".indexOf(ch = regex.charAt(0)) == -1) || (regex.length() == 2 && regex.charAt(0) == '\\' && (((ch = regex.charAt(1))-'0')|('9'-ch)) < 0 && ((ch-'a')|('z'-ch)) < 0 && ((ch-'A')|('Z'-ch)) < 0)) && (ch < Character.MIN_HIGH_SURROGATE || ch > Character.MAX_LOW_SURROGATE)) { int off = 0; int next = 0; boolean limited = limit > 0; ArrayList<String> list = new ArrayList<>(); while ((next = indexOf(ch, off)) != -1) { if (!limited || list.size() < limit - 1) { list.add(substring(off, next)); off = next + 1; } else { // last one //assert (list.size() == limit - 1); list.add(substring(off, value.length)); off = value.length; break; } } // If no match was found, return this if (off == 0) return new String[]{this}; // Add remaining segment if (!limited || list.size() < limit) list.add(substring(off, value.length)); // Construct result int resultSize = list.size(); if (limit == 0) { while (resultSize > 0 && list.get(resultSize - 1).length() == 0) { resultSize--; } } String[] result = new String[resultSize]; return list.subList(0, resultSize).toArray(result); } return Pattern.compile(regex).split(this, limit); }
可以说对我现在而言阅读起来依然有不明白的地方,日后还是需要再多看看,输入理解。
如果文章对你有所帮助,可以加入收藏做为小笔记哦。若文中有问题也可以评论指出,方便小的加以修改。感谢!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!