项目地址:https://github.com/jackfrued/Python-100-Days
本文代码皆为自己手撸,标程请参考每一节自带的code
目录
Python - 100天从新手到大师
Day 01 初识Python
Day 02 语言元素
Day 03 分支结构
Day 04 循环结构
Day 05 构造程序逻辑
环境搭建部分直接略过,目前我使用的环境是Anaconda+Pycharm
单行注释:以#和空格开头的部分
多行注释:三个双引号开头,三个双引号结尾
这里应该还要加一个东西,不知道后面有没有讲,如果代码中有涉及中文,最好是加上
# -*- coding: utf-8 -*-
惯例走一个
print('hello, world!')
工具介绍
交互式编程工具 - IPython、Jupyter
整型:Python中只有int一种,而且支持各种进制表示,如二进制0b100,八进制0o100,十进制100,十六进制0x100
浮点型:支持数字写法(如123.456)及科学计数法(1.23456e2)
字符串型:字符串是以单引号或双引号括起来的任意文本,如'hello',"hello",还有原始字符串表示法、字节字符串表示法、Unicode字符串表示法,而且可以书写成多行的形式(用三个单引号或三个双引号开头,三个单引号或三个双引号结尾)。
布尔型:只有True和False两个值(严格区分大小写)
复数型:形如3+5j,虚数部分的i在Python里是j
变量命名规则
使用print语句可以输出表达式运算结果,如print(a+b)
使用input语句通过键盘赋值,用int()进行类型转换,如a = int(input('a=')),原文中等号前后均有空格,但这不对
使用占位符格式化输出字符串:print('%d + %d = %d' % (a, b, a + b))
使用type()检查变量的类型:print(type(a))
类型转换函数
运算符优先级
运算符 | 描述 |
---|---|
`[]` `[:]` | 下标,切片 |
`**` | 指数 |
`~` `+` `-` | 按位取反, 正负号 |
`*` `/` `%` `//` | 乘,除,模,整除 |
`+` `-` | 加,减 |
`>>` `<<` | 右移,左移 |
`&` | 按位与 |
`^` `\|` | 按位异或,按位或 |
`<=` `<` `>` `>=` | 小于等于,小于,大于,大于等于 |
`==` `!=` | 等于,不等于 |
`is` `is not` | 身份运算符 |
`in` `not in` | 成员运算符 |
`not` `or` `and` | 逻辑运算符 |
`=` `+=` `-=` `*=` `/=` `%=` `//=` `**=` `&=` `\|=` `^=` `>>=` `<<=` | (复合)赋值运算符 |
本质上不用记那么多,加括号就完事儿了XD
使用if、elif和else构建分支结构,下面是文章中的案例,可以看到Python是用缩进四个空格来构造代码块的,用了Pycharm就能自动添加缩进,elif就是else-if
"""
用户身份验证
Version: 0.1
Author: 骆昊
"""
username = input('请输入用户名: ')
password = input('请输入口令: ')
# 如果希望输入口令时 终端中没有回显 可以使用getpass模块的getpass函数
# import getpass
# password = getpass.getpass('请输入口令: ')
if username == 'admin' and password == '123456':
print('身份验证成功!')
else:
print('身份验证失败!')
构建循环结构有两种,一种是for-in循环,一种是while循环
如果明确的知道要循环多少次,则可以用for-in循环
"""
用for循环实现1~100求和
Version: 0.1
Author: 骆昊
"""
sum = 0
for x in range(101):
sum += x
print(sum)
range用于产生一个不变的数值序列,而且这个序列通常都是用在循环中的
如果不知道具体循环的次数,则可以用while循环,根据条件来判断循环是否结束
"""
猜数字游戏
计算机出一个1~100之间的随机数由人来猜
计算机根据人猜的数字分别给出提示大一点/小一点/猜对了
Version: 0.1
Author: 骆昊
"""
import random
answer = random.randint(1, 100)
counter = 0
while True:
counter += 1
number = int(input('请输入: '))
if number < answer:
print('大一点')
elif number > answer:
print('小一点')
else:
print('恭喜你猜对了!')
break
print('你总共猜了%d次' % counter)
if counter > 7:
print('你的智商余额明显不足')
这里使用了random.ranint来产生1-100内的随机整数,break是终止当前所在循环,还有一个continue是用于放弃本轮循环,进入下一轮。
本篇里有个赋值语句引起了我注意
x, y = y, x
这样的写法等同于交换x和y的值,不用额外的使用临时变量做中转了。
1.寻找水仙花数
# -*- coding: utf-8 -*-
# 找出三位数以内的所有水仙花数
# 水仙花数:一个数等于它本身每一位数字的立方加和,则为水仙花数
# Author :Kevin Luo
x: int
for x in range(1000):
b = x // 100 # 求出百位
s = (x - x // 100 * 100) // 10 # 求出十位
g = x - b * 100 - s * 10
if b ** 3 + s ** 3 + g ** 3 == x: # **表示立方运算
print(x)
2.寻找完美数
# -*- coding: utf-8 -*-
# 找出三位数以内的所有完美数
# 完美数:一个数恰好等于它的因子(不包含其本身)之和
# Author :Kevin Luo
s = 0 # 变量s用于所有因子的求和
for i in range(1, 1000): # 循环变量i用于遍历1000以内的所有数
for j in range(1, i): # 循环变量j用于遍历出数字i的所有因子(不包含其本身)
if i % j == 0:
s += j
if s == i:
print(i)
s = 0
3.百钱百鸡
# -*- coding: utf-8 -*-
# 百钱百鸡:鸡翁一值钱五,鸡母一值钱三,鸡雏三值钱一。百钱买百鸡,问鸡翁、鸡母、鸡雏各几何?
# Author :Kevin Luo
w = 0 # 循环变量g用于计算鸡翁数量
m = 0 # 循环变量m用于计算鸡母数量
c = 0 # 循环遍历c用于计算鸡雏数量
for w in range(0, 100 // 5 + 1):
for m in range(0, 100 // 3):
c = 100 - w - m
if c % 3 == 0:
if w * 5 + m * 3 + c / 3 == 100:
print('鸡翁数量为:', w, '鸡母数量为', m, '鸡雏数量为', c)
4.生成斐波那契数列
# -*- coding: utf-8 -*-
# 生成100内的斐波那契数列
# Author :Kevin Luo
i1 = 1
i2 = 1 # 边界条件
print(i1, '', end='') # 使用end=让输出不换行
print(i2, '', end='')
while i1 + i2 < 100:
temp = i2
i2 = i1 + i2
i1 = temp
print(i2, '', end='')
5.Craps赌博游戏
# -*- coding: utf-8 -*-
# 规则:玩家掷两个骰子,每个骰子点数为1-6,如果第一次点数和为7或11,则玩家胜;如果点数和为2、3或12,则玩家输庄家胜。若和为其他点数,
# 则记录第一次的点数和,玩家继续掷骰子,直至点数和等于第一次掷出的点数和则玩家胜;若掷出的点数和为7则庄家胜。
# Author :Kevin Luo
import random
x1 = random.randint(1, 6) # 第一个骰子
x2 = random.randint(1, 6) # 第二个骰子
fp = x1 + x2 # 记录第一次掷出的点数和
print('第1次玩家掷出的点数和:%d' % fp)
flag = 0 # 游戏结束标识,0为未结束,1为结束
counter = 1 # 记录投掷的次数
while flag == 0:
if fp in [7, 11]:
flag = 1
print('玩家胜')
elif fp in [2, 3, 12]:
flag = 1
print('庄家胜')
else:
while flag == 0:
x1 = random.randint(1, 6) # 继续掷出第一个骰子
x2 = random.randint(1, 6) # 继续掷出第二个骰子
p = x1 + x2 # 记录后续点数和
counter += 1
print('第%d次玩家掷出的点数和:%d' % (counter, p))
if p == fp:
flag = 1
print('玩家胜')
elif p == 7:
flag = 1
print('庄家胜')
else:
continue