Python快速上手-从Pycharm开始
前言
下面介绍的这一些练习题都是取自link,侵删。
pycharm
首先去官网下载一个pycharm,链接是link.OK记得安装Community社区版本,这个是免费的。
启动软件,我们解释一下:
这里需要简单配置一下环境。
new environment using这个选项,默认是VistualEnv。大家需要明确一点:Pycharm只是一个编译器,它并没有给我们提供python的编译环境,那些默认路径啥的都得咱们自己去配置,那些包啊啥的都得咱们自己导入。VirtualEnv意思是把你安装的python环境复制一份,放到你的工程下,这样一来,多个python项目就不会相互干扰。但是你得清楚这样一来,你在命令行里pip install安装的库可就没法作用到VirtualEnv里。
当然咱们是个人练习,安装过的package就不想再多次安装了,咱们就用Existing interpreter,一劳永逸。
刷题方针
按照链接里老哥给的100道题目,先尝试自己写,然后有语法障碍的话就直接参考link查询一下即可,查不到的请自行发挥想象力。
实例001:数字组合
题目 有四个数字:1、2、3、4,能组成多少个互不相同且无重复数字的三位数?各是多少?
解析 思路很简单,需要一个for循环。
ans = 0
for i in range(0, 4):
for j in range(0, 4):
for k in range(0, 4):
if (i != j) and (j != k) and (i != k):
ans += 1
print(ans)
大神用的是itertools,我去了解一下。
文档上说这是一种为了高效迭代器而产生的函数集合,听起来还不错,我找到了这个函数:
咱们试试看:
import itertools
ans = 0
details = [1,2,3,4]
for i in itertools.permutations(details, 3):
ans += 1
print(ans)
收获
1.用缩进来代替花括号,一开始有点不适应;语句结束时居然不用加分号,一开始有点不适应;if语句的判断居然用and且不需要加大括号,有点不适应;
2.这个范围for循环,我查了一下文档,即使在for循环中更改循环变量也是没啥用用处的,僵硬。range(a, b)其实是一个左闭右开区间。
3.ans++好像是不能用,应该是不支持这种写法,难受。
4.导入库就很简单,直接import即可,使用库函数直接.操作符即可。这个迭代器库还不错,挺好的。
5.注释也挺方便的,单行注释#,多行注释用三个单引号或者三个双引号即可
实例002:“个税计算”
题目 企业发放的奖金根据利润提成。利润(I)低于或等于10万元时,奖金可提10%;利润高于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可提成7.5%;20万到40万之间时,高于20万元的部分,可提成5%;40万到60万之间时高于40万元的部分,可提成3%;60万到100万之间时,高于60万元的部分,可提成1.5%,高于100万元时,超过100万元的部分按1%提成,从键盘输入当月利润I,求应发放奖金总数?
解析 思路可以说是非常简单了。
profit = int(input('Show me the money: '))
bonus = 0
thresholds = [100000, 100000, 200000, 200000, 400000]
rates = [0.1, 0.075, 0.05, 0.03, 0.015, 0.01]
for i in range(len(thresholds)):
if profit <= thresholds[i]:
bonus += profit * rates[i]
profit = 0
break
else:
bonus += thresholds[i] * rates[i]
profit -= thresholds[i]
bonus += profit * rates[-1]
print(bonus)
收获
1.定义一个用户输入也是非常简单了,这里指定成int类型输入。
2.break的逻辑应该是和正常语言一致;
3.len()函数可以返回字符串、元组或者列表的数量,类似.size()操作
实例003:完全平方数
题目 一个正整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?
解析 非常简单了,直接while循环好了
from math import sqrt
def issantify(n):
p = sqrt(n + 100)
q = sqrt(n + 268)
ans = False
if p == int(p) and q == int(q):
ans = True
return ans
ans = 0
while issantify(ans) == False:
ans += 1
print(ans)
收获
1.写个函数还是很简单的,def即可,想输出结果就直接return,实在是写的太随心所欲了。
2.使用sqrt需要从math中导入sqrt;
3.bool值有点意思,True and False;
实例004:这天第几天
题目 输入某年某月某日,判断这一天是这一年的第几天?
解析 就考虑一个闰月就完事儿了,这题简单
def isLeapYear(y):
return (y%400==0 or (y%4==0 and y%100!=0))
DofM=[0,31,28,31,30,31,30,31,31,30,31,30]
res=0
year=int(input('Year:'))
month=int(input('Month:'))
day=int(input('day:'))
if isLeapYear(year):
DofM[2]+=1
for i in range(month):
res+=DofM[i]
print(res+day)
这一题没有任何收获,pass
实例005:三数排序
题目 输入三个整数x,y,z,请把这三个数由小到大输出。
解析 咱们尝试用一下python的那些排序函数
raw2=[]
for i in range(3):
x=int(input('int%d: '%(i)))
raw2.append(x)
print(sorted(raw2))
收获
1.这个raw[]的定义真的是让我非常难受了,这不就直接成vector了???操作这么简单么???直接用append就添加元素了。那么删除元素呢?参考这篇文章删除元素可以说是非常方便了,我丢,python属实方便;
2.这个sorted和sort的区别是,前者返回一个新的列表,后者是在输入列表的基础上进行排序。更多可以参考这个排序
实例006:斐波那契数列
解析 那就实现呗,至于实现多少个呢?我看就定100个好了。斐波那契数列还是很好实现的,f1 = 1, f2=1, 后面fn = f(n-1) + f(n-2),老递归了。
def Fib(n):
return 1 if n<=2 else Fib(n-1)+Fib(n-2)
print(Fib(int(input())))
收获
1.这个递归其实到没有惊讶到我,主要是学到了类似?:这样的写法
实例007:copy
题目 将一个列表的数据复制到另一个列表中。
解析 就直接用copy模块,没啥好多说的。
import copy
a = [1,2,3,4,['a','b']]
b = a # 赋值
c = a[:] # 浅拷贝
d = copy.copy(a) # 浅拷贝
e = copy.deepcopy(a) # 深拷贝
收获
1.copy模块还是好用啊,舒服;
2.关于浅拷贝和深拷贝的区别不再叙述;
3.print函数真的硬核,直接把列表所有元素都打印出来了。。。
实例009:暂停一秒输出
解析 使用 time 模块的 sleep() 函数。
import time
time.sleep(1)
收获
1.关于sleep以后系统干了啥就不多说了
总结
OK到这里基本上接触的知识就很少,感觉难度不高,后面咱们有针对性的研究一些知识。