0基础0元学习Python-第一天_mpr0xy的博客-程序员信息网_0元学python

技术标签: 编程  acquisition  基础  Python  

目录

目录

前言

了解Python

Python官网

维基百科讲Python

从那里开始

第0题

第1题

解题过程

 总结


前言

有一个朋友李雷,想学Python。为啥想学呢?可能是看了这个帖子你都用 Python 来做什么?

 这个帖子非常的有意思,大家的回答超乎李雷的想象,你可能知道Python可以用来写爬虫,分析各种数据,比如京东上大家购买内衣的颜色分布等等,或者一些小工具,帮助我们自动化完成一些繁琐的工作。但是这只是冰山一角,帖子里的回答还有很多奇妙的作品:

  • 拿来了解女朋友情绪变化,顺道自动回复。

  • 分析B站宅舞主播如何跳舞。

  • 为女朋友和自己定制一款游戏。

  • 编程给图像随机填色呀。

  • 用来玩游戏。

这个帖子看戏来,李雷有一点心动的感觉。于是想自己也来试一试,希望也能用Python开发出有价值的东西。

在网上搜索学Python,课程非常多,完全不知道从那里开始,要做什么,是先花钱买个课跟着学,还是先买几本书来看一看呢?

李雷不想花钱消除焦虑,于是李雷想挑战一下0基础0元在网上学习Python。

李雷开始了这个挑战。

 

了解Python

 李雷知道,想学Python只是一时的冲动,真学起来其实坚持不了3小时,所以还是先了解一下Python是什么,学了能做哪些事情,为这个冲动再加一些利益诱惑,说不定能坚持3天。

了解一个事物的本质,或者说在网上了解一个事物的本质,最好的方式和路径如下:官网、维基百科、权威社区、大牛博客、相关文档等等。

 

Python官网

于是李雷,首先打开了Python的官方网站https://www.python.org/。如图1

 

图1

 

官方网站对Python的定义是:让你更快的工作和更有效集成系统的程序语言。李雷知道更快的工作是什么意思,但是对更有效的集成系统不是很理解。接着看介绍,官方网站提供了初学者指南,源码下载,相关文档,甚至还有相关工作的招聘信息,真是业界良心网站。

在官方网站首页引起李雷注意的是,Use Python for。用Python做什么,上面列举了一些,后面的英文是框架的名字:

  1. 网站开发:Django、Pyramid
  2. 桌面程序开发:tkInter、PyGObject
  3. 科学和大数据:Scipy、Pandas
  4. 软件开发:Buildbot、Trac
  5. 系统管理:Ansible、Salt

李雷看到这里,产生了一个疑问,这个语言是万能的吗?咋能干这么多事情呢。接着李雷打开了维基百科网站,看看上面对这个万能语言怎么说。

 

维基百科讲Python

因为维基百科在大陆不能访问,所以找了一个替代网站进行了查询了Python的介绍。如图2:

 

图2

 

其中对Python可以有几点认识:

  1. Python是一种高级动态语言,有很多人把Python作为一种“胶水语言”使用。使用Python将其他语言编写的编程进行集成和封装。
  2. Python的设计哲学是“优雅”、“明确”、“简单”。Python开发者的哲学是“用一种方法,最好是只有一种方法来做一件事”。
  3. Python相比于静态语言,速度会稍慢一些,不过,根据二八定律,大多数编程对速度要求不高。在某些对运行速度要求很高的情况,Python设计师倾向于使用JIT技术
  4. Python因为对网络协议支持很完善,所以常用于写服务器软件和爬虫。

 

从那里开始

看了一些介绍,李雷依然有一些云里雾里,到底如何开始呢?

在知乎帖子里,有一个回答,提及了一个网站http://www.pythonchallenge.com/,这个网站给了一些谜题,可以使用Python来解答这个谜题,李雷觉得这是一个开始的方案,把学习当成一个游戏,去闯关,应该比上来就学一大顿知识会更容易坚持,于是,李雷打开了这个网站,看到了网站上介绍,如图3(已经使用谷歌翻译)

图3

 

那就直接点击挑战吧,李雷已经准备好。

第0题

页面上显示了这样一句话Hint: try to change the URL address.

然后界面上有一张图片,上面有三个数字238。

根据提示,李雷把现在url上的0.html修改成了238.html,界面显示了 No... the 38 is a little bit above the 2...

李雷有点蒙,于是把0.html改成1.html试一试。结果界面显示 2**38 is much much larger.

李雷凭借直觉,是不是应该输入2**38.html才行。结果界面显示 give the answer, not the question.

李雷这下知道了,需要2**38的值,现在怎么知道2**38的啥意思呢。根据常识,两个数字中间有符号,可能是某种运算符,于是在网上搜索 python ** 运算符找到一些说明,李雷知道了2**38代码了2的38次方。那是不是在Python语言里输入这个值,就能知道2的38次方是多了呢?

李雷打算找一个在线的Python环境试一试,因为本地安装环境太费事件,而且万一卡住,很容易就放弃了。

在Bing上搜索Python online,找到了一个在不翻墙的情况下,访问速度还可以的网站https://www.onlinegdb.com/online_python_compiler。通过这个网站,可以在线写Python代码,并运行代码看结果。

在中间的编辑器里输入代码,然后点击顶部的Run按钮,就能在下方的输出界面里看到结果了。

Caption

 

在题目url里输入274877906944.html。成功到了第一题的界面,第一次完成,李雷有了一点点信心。

第1题

第一题的界面如图4

图4

看到第一题到界面,李雷刚有到信心要逃走了。这是啥意思,虽然给了提示,但是这一串茄子色的字母到底想说啥呢?

Think Think。李雷开始专注的在大脑中寻找思路,看到谍战片的同学知道,以前的情报人员交流情报都会用到编码,避免情报被直接泄露。上图中的K->M,O->Q,E->G。在字母表里,就是把字母往右移动两位映射。

  字母表:ABCDEFGHIJKLMNOPQRSTUVWSYZ

比如g fmnc wms每个字母往右移动两位字母映射会得到i hope you。如果每个都这样手动算,是不是很累和苦逼。李雷想,这要是能用Python写个程序自动处理映射关系多好。

 

解题过程

这需要涉及处理字符串和ASCII码

李雷在花了4个小时,在网上寻找如何处理字符串,ASCII码,并且试着使用循环来处理每个字母。这个过程让李雷痛苦,但是正是有这个过程,李雷写出了下面对代码:

input1 = "g fmnc wms bgblr rpylqjyrc gr zw fylb. rfyrq ufyr amknsrcpq ypc dmp. bmgle gr gl zw fylb gq glcddgagclr ylb rfyr'q ufw rfgq rcvr gq qm jmle. sqgle qrpgle.kyicrpylq() gq pcamkkclbcb. lmu ynnjw ml rfc spj."
output = ""
startNumber = ord("a")
for i in range(len(input1)):
	if input1[i] == " " or input1[i] == ".":
		output = output + input1[i]
	else:
	 	oldasc = ord(input1[i])
	 	newasc = oldasc + 2 - startNumber
	 	newasc = newasc % 26
	 	newasc = newasc + startNumber
	 	newchr = chr(newasc)
		output = output + newchr
print(output)

这里需要考虑,字母yz会对应ab,所以数字超过字母表会从字母表的头开始计算。输出的结果里包含了解题答案:

 

i hope you didnt translate it by hand. thats what computers are for. doing it in by hand is inefficient and thatws why this text is so long. using string.maketransxy is recommended. now apply on the url

 

这句话提示了,可以使用Python的string.maketrans方法。于是在网上查询了一番以后,李雷写出了下面的的代码:

intab = "abcdefghijklmnopkrstuvwxyz"
outab = "cdefghijklmnopkrstuvwxyzab"
trantab = str.maketrans(intab, outab)

str = "g fmnc wms bgblr rpylqjyrc gr zw fylb. rfyrq ufyr amknsrcpq ypc dmp. bmgle gr gl zw fylb gq glcddgagclr ylb rfyr'q ufw rfgq rcvr gq qm jmle. sqgle qrpgle.kyicrpylq() gq pcamkkclbcb. lmu ynnjw ml rfc spj." 
print(str.translate(trantab))

李雷和自己第一次写代码一对比,后者真是比前者...不说了,python真是化繁为简~

这时,李雷知道把map带入到函数中,可以得到ocr,可以去第二题了。

 

 总结

李雷了解了Python是什么,它的历史、优势,在当前能做什么事情。

写了自己第一个Python程序,帮助转换一个字符串。

对学习Python有了那么一点信心。

 

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/u012787757/article/details/104239287

智能推荐

Ansible批量下发文件、批量执行命令_尤达c的博客-程序员信息网_ansible批量下发

什么上库AnsibleAnsible是2013年推出的一款IT自劢化和DevOps软件,目前由Redhat已签署Ansible收购协议。其是基亍Python研发,糅合了很多老运维工具的优点实现了批量操作系统配置,批量程序的部署,批量运行命令等功能ansible可以让我们实现:自劢化部署APP自劢化管理配置项自劢化的持续交付自劢化的(AWS)于服务管理为什么要选择ansible• ansible优点是仅需要ssh和Python即可使用无客户端ansible功能强大,模块丰富上手容_1671465600

38Khz红外遥控发射_gmdjmawy的博客-程序员信息网_38khz红外发射电路

http://blog.sina.com.cn/s/blog_4ca9659e0101i9nn.html红外发射、接收头(红外基础知识)目前市售红外一体化接收头有两种:电平型和脉冲型,绝大部分的都是脉冲型的,电平型的很少。 电平型的,接收连续的38K信号,可以输出连续的低电平,时间可以无限长。其内部放大及脉冲整形是直接耦合的,所以能够接收及输出连续的信号。 脉冲型的,只能接收间

狮猫拼狗之下,字节跳动的电商之路不好走_何玺的博客-程序员信息网

近日,字节跳动在电商领域的新动态又成了业内热议的话题。字节跳动被曝将进入电商赛道日前有媒体报道称字节跳动正在开发新的电商APP。据称,这款新的APP在经营方式和品类上很可能对标网易严选。原因有两点,一是它以自营为主,不再向头条系以往的做法,主要为第三方电商平台做导流。二是在品类方面与网易严选类似,都是以工厂直销的个性化商品为主。不过,字节跳动方面很快就对此进行了否认。官方回复称,新APP不存...

rk3399添加EC25E/EC20...模组_linux_qian的博客-程序员信息网_ec20 ipv6

搞来搞去搞了很久,差点放弃走人的时候,发现竟然是这点事。。。辛酸史如下:android6.01-----kernel4.4.36-----编译环境ubuntu16.04一、kernel driver内核有4种驱动方式,usb serial、CDC ACM、Gobinet、QMI WWAN,本文选用的是usb serial和QMI WWAN两种驱动。1.usb serial...

oracle job如何执行存储过程,使用Oracle job定时执行存储过程_时维教育顾老师的博客-程序员信息网

Oracle job允许我们定制任务的执行时间,并提供了灵活的处理方式,还可以通过配置,安排任务在系统用户访问量少的时段内执行,极大地提高了工作效率。例如,对于数据库日常的备份、更新、删除和复制等耗时长、重复性强的工作,我们就可以利用Oracle job去自动执行以减少工作量。 本文以一个问题来介绍这一功能的使用。问题:假设有一个存储过程p_test,如何才能每20分钟执行一次?解答:1、把ini...

分布式:程序员和架构师的分水岭_LiangGzone的博客-程序员信息网

微服务因其高内聚、低耦合、高扩展、敏捷开发为很多企业所用,当然,没有任何一项技术是完美的。系统微服务化后,一个看似简单的功能,内部可能需要调用多个服务并操作多个数据库实现。毫不夸张地说,...

随便推点

Unity UGUI——Text组件(Paragraph)_Mr_AHao的博客-程序员信息网

Alignment、Horizontal Overflow、Vertical Overflow、Best Fit

QT人机交互设计实现C++,为自己的应用程序添加标题和菜单,并能通过菜单响应自己的函数完成一定的任务,用户可利用键盘、鼠标控制程序运行.利用connect函数、计时器等。_Super毛毛穗的博客-程序员信息网

mainwindow.hprotected: void paintEvent(QPaintEvent*e); void mousePressEvent(QMouseEvent *event);private: int m_i ; QTimer*m_pTimer ; Ui::MainWindow *ui;private slots: void Fun1();mainwindow.cpp#include "mainwindow...

C++中静态成员函数访问成员变量问题_转瞬之间的博客-程序员信息网_c++成员函数如何访问成员变量

C++会区分两种类型的成员函数:静态成员函数和非静态成员函数。这两者之间的一个重大区别是,静态成员函数不接受隐含的this自变量。所以,它就无法访问自己类的非静态成员。 网络上有很多关于解决静态成员函数访问普通成员变量的方法,总结如下: 方法一:声明类的所有数据成员都是静态的。运用这种方式的话,静态的成员函数就能够直接地访问它们,例如:方法二:传入对象参照信息: 

Arduino 与28BYJ-48步进电机握手_2345VOR的博客-程序员信息网_arduino控制28byj48步进电机

1. 步进电机是一种将电脉冲转化为角位移的执行机构。 当步进驱动器接收到一个脉冲信号,它就驱动步进电机按设定的方向转动一个步进角。 2. 您可以通过控制脉冲个数来控制角位移量,从而达到准确定位的目的。 同时您可以通过控制脉冲频率来控制电机转动的速度和加速度,从而达到调速的目的。 3. 28BYJ-48步进电机多用于雕刻机、3D打印机等需要精确控制的设备。本篇使用ULN2003驱动五线四相减速步进电机。

微信小程序之获取用户信息(流程+2种方法)_Q❀的博客-程序员信息网_微信小程序获取用户信息

获取流程图ui库Vant Weapp:Vant Weapp地址(点击跳转)第一种方法适用于直接点击登录获取在界面添加登录按钮,用户点击按钮调用wx.getUserProfile()函数来提示用户授权登录,授权成功后,把用户头像数据和名称数据保存到缓存区里,并且改变全局变量的值点击登录后![在这里插入图片描述](https://img-blog.csdnimg.cn/04527d080f14473d85a24ec732546458.png登录成功后跳转到首页 <van-but

什么是 反向代理_小洁子_2009的博客-程序员信息网_反向代理

什么是 反向代理一、反向代理的定义理解思路:无代理–>正向代理–>反向代理【无代理】与有代理区别为:主要表现:过滤不同、映射不同、权限不同。【过滤】使用代理,可以对外界或内部的Internet地址进行过滤。【映射】使用代理,多个用户使用代理访问外界时,只映射为一个IP地址。【权限】使用代理,外界不能直接访问到内部网,同时限制内部网对外部的访问权限。无代理,无以上特征。 【正向代理】:(内部网络用户向外网发送请求)正向代理即通常所说的代理,用于代表内部网络用户向Intern

推荐文章

热门文章

相关标签