python学习第一周总结
Python概述
1.Python是一种解释型语言,解释型语言的最大优点是平台可移植性,最大的缺点是执行效率低下
2.今天当计算机硬件已经足够发达的时候我们追求的更多的并不是程序的执行效率而是开发效率
3.Python的官方网站
4.使用Python的包管理工具pip安装第三方模块
5.如果想使用交互式环境进行Python开发那么可以使用ipython或者jyputer的notebook项目
如果要做团队开发以及需要使用多文件多米快写作的大型项目,推荐使用pycharm的集成开发工具要下载pycharm‘戳这里’
变量
变量是什么:变量是数据的载体,相当于电脑里的一块内存空间,通过变量名我们可以对这块内存空间里的数据进行读写操作
变量命名:
1.硬性规则:
- 变量名由字母数字和下划线构成,数字不能开头
- 大小写敏感
- 不要和关键字、保留字冲突
2.PEP8:
- 用全小写字母
- 多个单词用下划线连接
- 见名知意(名字:name,年龄:age)
- Python没有定义常量的语法,但是我们可以通过将变量名全大写来表示这个值是一个常量
- 符号常量总是优于字面常量(PI = 3.14 优于 3.14)
变量类型:
类型 | 符号 |
---|---|
整型 | int |
浮点型 | float |
字符串 | “” |
布尔类型 | bool |
复数型 | a + bj |
运算符
类型 | 符号 |
---|---|
赋值运算符 | = += -= = /= *= //= %= &= |
算术运算符 |
|
逻辑运算符 | and or not |
关系运算符 | < >= <= != == > |
身份运算符 | is not is |
分支结构
使用if,elif,else来构建分支结构,Python不通过大括号来构造代码块而是通过缩进4个空格来构造一个代码块,也因此Python对于缩进的要求极为严格,这一点上与C/C++,java等语言有一定的区别。
一个简单的分支结构:
"""
┏┓ ┏┓
┏┛┻━━━┛┻┓
┃ ┃
┃ ━ ┃
┃ > < ┃
┃ ┃
┃... ⌒ ... ┃
┃ ┃
┗━┓ ┏━┛
┃ ┃ Code is far away from bug with the animal protecting
┃ ┃ 神兽保佑,代码无bug
┃ ┃
┃ ┃
┃ ┃
┃ ┃
┃ ┗━━━┓
┃ ┣┓
┃ ┏┛
┗┓┓┏━┳┓┏┛
┃┫┫ ┃┫┫
┗┻┛ ┗┻┛
"""
x = int(input('请输入x的值:'))
if x <= 0:
y = -x
elif x < 50:
y = x * 2
else:
y = x ** 2
print(y)
分支结构之中也可以嵌套另外的分支结构,我们称作嵌套分支结构,在实际开发中会根据需求来使用嵌套分支结构,例如:
"""
_ooOoo_
o8888888o
88" . "88
(| -_- |)
O\ = /O
____/`---'\____
.' \\| |// `.
/ \\||| : |||// \
/ _||||| -:- |||||- \
| | \\\ - /// | |
| \_| ''\---/'' | |
\ .-\__ `-` ___/-. /
___`. .' /--.--\ `. . __
."" '< `.___\_<|>_/___.' >'"".
| | : ` - `.;`\ _ /`;.`/ - ` : | |
\ \ `-. \_ __\ /__ _/ .-` / /
======`-.____`-.___\_____/___.-`____.-'======
`=---='
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
佛祖保佑 永无BUG
"""
import math
while(True):
choose = input('请输入要执行的任务(1:求游泳池造价,2:求三角形周长面积,3:温度单位的转化,4:退出):')
# 游泳池造价
if (choose == '1'):
r = float(input('请输入游泳池的半径:'))
PI = 3.14
r2 = r + 3
f1 = (PI * r2 ** 2 - PI * r ** 2) * 2
f2 = PI * r2 * 2 * 35.5
print('需要花的总价格为:' + str(f1 + f2))
# 三角形周长面积
elif (choose == '2'):
a = float(input('请输入第一条边长:'))
b = float(input('请输入第二条边长:'))
c = float(input('请输入第三条边长:'))
if ((a + b) <= c or (a + c) <= b or (b + c) <= a):
print('这三条边无法构成三角形')
else:
l = a + b + c
p = l / 2
s = math.sqrt(p * (p - a) * (p - b) * (p - c))
print("三角形的周长为:" + str(l))
print("三角形的面积为:" + str(s))
# 符号的转化
elif (choose == '3'):
temp = input('请输入温度(华氏为F,摄氏为C):')
s = len(temp)
if ('0' <= temp[s - 2] <= '9'):
ch = float(temp[:-1])
if (temp[s - 1] == 'f' or temp[s - 1] == 'F'):
ch2 = (ch - 32) / 1.8
print(str(ch) + 'F = ' + str(ch2) + 'C')
elif (temp[s - 1] == 'C' or temp[s - 1] == 'c'):
ch2 = ch * 33.8
print(str(ch) + 'C = ' + str(ch2) + 'F')
else:
print('请输入正确的温度符号')
else:
print("请输入正确的温度")
elif (choose == '4'):
print('程序结束!')
break
else:
print('请输入正确的数字')
循环结构
在日常开发之中,循环结构是比不可少的,当一件事情我们需要重复的去操作他,比如我们需要算出1-100之和,很显然我们不能输入1+2+3+4+·····+100,这样的效率极为低下,而且如果要加到10000,1000000000很明显这是不可行的,那么这个时候我们就要引入循环结构。循环结构有两种分为for-in循环和while循环。
for-in循环
for-in循环一般应用于知道循环次数的时候,例如我们上面提到的求1-100之和:
"""
求1-100之和
range后()里的数字第一个表示从几开始,默认为0,如果循环从0开始则可以不写,
第二个数字表示循环到几的时候结束,循环只会进行到第二个数字 - 1,如下面程序
只会执行到100而不会执行到101,第三个值是步长,即数值序列的增量,默认为1,
如果循环变量的变化值为1则可以不写,三个数中只有第二个数字是必须写的。
"""
num = 0
for x in range(1,101,1):
num += x
print('1-100之和为',num)
"""
求1-100之中偶数和
此次因为是求偶数之后,我们从0开始,所以只要将步长设置为2,所有x便都是偶数,另外
要注意的是如果你要写步长,那么即使循环是从0开始的也无法省略。
"""
num = 0
for x in range(0,101,2):
num += x
print('1-100之中偶数和',num)
while循环
while循环适用于不知道循环次数的情况下,while循环的循环条件只要为真,while循环就会一直执行下去,如果我们定义一个bool类型的变量为is_test = True,将is_test作为while的循环条件,那么while就会成为一个死循环会一直执行下去,知道is_test的值变为False。
"""
猜拳游戏
玩家输入1.剪刀,2.石头,3.布,同时电脑产生一个1-3之间的随机数,根据猜拳规则判断胜负
输家会失去100元,当玩家输完或者玩家赢光电脑的钱之后便会结束游戏,由于猜拳的不确定
性,所以我们使用while循环来完成这个程序,只要玩家的钱大于0元,且小于2000便一直执
行猜拳游戏
"""
from random import randint
money = 1000
while 0 < money < 2000:
my_hand = int(input('请出拳(1.剪刀,2.石头,3.布):'))
com = randint(1, 3)
if my_hand == 1:
if com == 1:
print('电脑出了剪刀你们没有分出胜负')
elif com == 2:
money -= 100
print('电脑出了石头你输了扣除你100元你还剩下%d元' % money)
else:
money += 100
print('电脑出了布你赢啦增加你100元你还剩下%d元' % money)
if my_hand == 2:
if com == 1:
money += 100
print('电脑出了剪刀你赢啦增加你100元你还剩下%d元' % money)
elif com == 2:
print('电脑出了石头你们没有分出胜负')
else:
money -= 100
print('电脑出了布你输了扣除你100元你还剩下%d元' % money)
if my_hand == 3:
if com == 1:
print('电脑出了剪刀你输了扣除你100元你还剩下%d元' % money)
elif com == 2:
money -= 100
print('电脑出了石头你赢啦增加你100元你还剩下%d元' % money)
else:
money += 100
print('电脑出了布你们没有分出胜负')
if money == 2000:
print('恭喜你赢得了最后的胜利')
else:
print('很遗憾你输了')
同样循环结构是可以嵌套的,例如:
"""
九九乘法表
通过2个循环,外层控制行内层控制列来实现输出九九乘法表
"""
for row in range(1, 10):
for col in range(1, row + 1):
print('%d * %d = %d' % (col, row, row * col), end= '\t')
print()
"""
打印:
A
BB
CCC
DDDD
EEEEE
*
**
***
****
***** 0 1 2 3 4 5 6 7 8
* 4 3 2 1 0 1 2 3 4
*** 1 3 5 7 9 7 5 3 1
*****
*******
*****
***
*
"""
x = int(input('请输入有几行:'))
# 图形1
for raw in range(0, x):
for col in range(raw + 1):
print(chr(raw + 65), end= '')
print()
# 图形2
for raw in range(1, x + 1):
for col in range(1, x + 1):
if col < (x - raw + 1):
print(' ', end='')
else:
print('*', end= '')
print()
# 图形3
if x % 2 != 0:
for raw in range(0, x):
if raw < x // 2 + 1:
for col in range(0, x // 2 + 1 + raw):
if col < x // 2 - raw:
print(' ', end='')
else:
print('*', end='')
else:
for col in range(0, x * 2 - x // 2 - raw - 1):
if col < raw - x // 2:
print(' ', end='')
else:
print('*', end='')
print()
else:
x -= 1
for raw in range(0, x):
if raw < x // 2 + 1:
for col in range(0, x // 2 + 1 + raw):
if col < x // 2 - raw:
print(' ', end='')
else:
print('*', end='')
else:
for col in range(0, x * 2 - x // 2 - raw - 1):
if col < raw - x // 2:
print(' ', end='')
else:
print('*', end='')
print()
循环有许多利用方式,其中极为典型的就有一种穷举法,顾名思义,穷举法就是举出所有例子从中找出正确答案,由于计算机现在硬件现在越来越强大,cpu的计算速率也是极高的,所以穷举法虽然很笨,但是确实是一些问题的解决办法,例如:
"""
有一批鱼,第一个人分成五份之后多了一个,他把那一个扔了,并且拿走了其中一份
第二个人进行了一样的操作
直到第五个人也进行了一样的操作
问这一批鱼知道多少个
由于不知道每个人拿走了多少,也不知道最后剩下多少鱼
所以使用穷举法来解决
"""
fish = 6
is_prime = True
while is_prime:
fish += 5
temp = fish
for x in range(5):
if (temp - 1) % 5 == 0:
temp = (temp - 1) / 5 * 4
if x == 4:
is_prime = False
print(fish)
"""
找出10000以内的完美数
完美数:所有因子相加的和为自己本身的数
6 = 1 + 2 + 3
"""
import math
for num in range(2, 10001):
perfect = 1
a = int(math.sqrt(num)+1)
for x in range(2, a):
if num % x == 0:
perfect += x
if x != num // x:
perfect += num / x
if perfect == num:
print('%d是完美数' % num)
print(endl - start)
综合程序
学习了一周之后,学习了变量,运算符,分支结构,循环节构等,于是在一周的末尾,利用这一周所学习的知识,完成了一个小程序。
"""
Craps赌博游戏
游戏规则:玩家掷两骰子,骰子停下来后,计算两个骰子向上面的点数之各。
如果第一次掷的和是7或11,玩家赢;
如果和为2,3或12(称为craps)则玩家输,庄家赢。
如果和为4,5,6,8,9或10则,这个和就成为玩家的点数,继续掷骰子
此时如果掷的点数和等于点数,则玩家赢,如等于7,刚玩家输,
否则,再掷骰子直至分出输赢
"""
from random import randint
money = int(input('请输入您需要购买的筹码金额,庄家金额与您相同:'))
ot_money = money
num = 1
while True:
while True:
debt = int(input('请下注:'))
if debt <= money and debt <= ot_money:
break
elif debt >= money:
print('您仅剩%d筹码,请重新下注' % money)
else:
print('庄家仅剩%d筹码,请重新下注' % ot_money)
if num == 1:
first = randint(1, 6)
second = randint(1, 6)
point = first + second
print('第一次掷出的点数为:', point, sep='')
if point == 7 or point == 11:
print('玩家获胜')
money += debt
ot_money -= debt
print('您的剩余金额为:', money)
print('庄家的剩余金额为:', ot_money)
elif point == 2 or point == 3 or point == 12:
print('庄家获胜')
money -= debt
ot_money += debt
print('您的剩余金额为:', money)
print('庄家的剩余金额为:', ot_money)
else:
while True:
ot_first = randint(1, 6)
ot_second = randint(1, 6)
ot_point = ot_first + ot_second
print('骰子掷出的点数为:', ot_point, sep='')
if ot_point == point:
print('玩家获胜')
money += debt
ot_money -= debt
print('您的剩余金额为:', money)
print('庄家的剩余金额为:', ot_money)
break
elif ot_point == 7:
print('庄家获胜')
money -= debt
ot_money += debt
print('您的剩余金额为:', money)
print('庄家的剩余金额为:', ot_money)
break
if money == 0:
print('您输光了所有筹码')
break
elif ot_money == 0:
print('您赢光了庄家的筹码')
break