1.first sentence-'Hello World’
#!/usr/bin/env python --系统默认下的
# !/usr/bin/python --原装的
print("hello world!")
2.变量的定义和赋值
(1)python是强类型定义语言,无需定义数据类型,直接根据赋值结果反向定义数据类型
name = "EleanorJiang" # string
age = 0 # int
salary = 2000.0000 # float
(2)变量的内存地址指向问题
name = "Eleanor Jiang"
print(name)
name2 = name # 指向name的内存地址的值
print(name2)
print("What is the value of name2 now? name = ", name, "name2 = ", name2)
print("before:", name2)
name = "Eleanor Jiang2" # 重新定义变量,改变name值时,name2的值不变
print("after:", name2)
执行结果
(3)命名方式
name_of_GF = "friend1" # 使用下划线命名变量(python较多)
nameOfGF = "friend2" # 使用驼峰式命名变量(java较多)
PIE = 3.14 # 常量(static):Python 没有常量的概念,用大写表示常量,但是编译器方面对于此变量值是可以更改的
3.字符code的演变过程
# utf-8:英文1个字节 中文3个字节 属于unicode
# ASCII: 255 1bytes
# 1980 GB2312:7000+
# 1995 GBK1.0 2w+
# 2000 GB18030 2.7w+
# Unicode 2bytes
# utf-8 en:1bytes,zh:3bytes
4.Python默认的字节编码
# python3 default:uft-8
# python2 default:ASCII
5.input 用户输入
name = input("What is your name?") # 用户输入
print("Hello " + name)
6.input 输入的值默认为string类型,如遇age,salary之类 数字类型需要将String类型强制转化为数字类型。
同时,数字类型也可以强制转化为string类型
name = input("What is your name?") # 用户输入
print("Hello " + name)
age = input("What is your age?")
print("before:" + str(type(age))) # 打印变量的数据类型
age = int(age) # 强制转换 python:强类型定义
print("after1:" + str(type(age)))
age = str(age)
print("after2:" + str(type(age)))
age = int(age)
job = input("What is your job?")
salary = input("What is your salary?")
salary = float(salary)
7.格式化字符串输出:
(1)使用%类占位符
# 格式化输出 占位符: %s(string) %d(double,验证数字类型) %f(float 20000->20000.000000)
info = '''
--------info of %s------------
name:%s
age:%d
job:%s
salary:%f
''' % (name, name, age, job, salary)
print(info)
(2)使用{}和变量名作为占位符 例: {_name}与_name=name对应
info2 = '''
--------info2 of {_name}------------
name:{_name}
age:{_age}
job:{_job}
salary:{_salary}
'''.format(_name=name,
_age=age,
_job=job,
_salary=salary)
print(info2)
(3)使用{}与数字作为占位符,同一占位符可用多次 例: {0}可多次出现
info3 = '''
--------info3 of {0}------------
name:{0}
age:{1}
job:{2}
salary:{3}
'''.format(name,
age,
job,
salary)
print(info3)
8.关于注释
注释的快捷键: ctrl+/ 和 shift+"
"""多行注释"""
'''多行注释''' # python中'和"完全一样
# 单行注释
9.调用其他模块或者标准库,使用import
import getpass # import 模块 or 标准库 getpass给密码加密
_username = 'Eleanor'
_password = '123'
username = input("username:")
pwd = getpass.getpass("password:") # pycharm里getpass不好使 可以在dos界面执行
print(username, pwd)
dos执行结果
10.Python是强类型语言,强制缩进,省略了结构符,类似{}以及()
if _username == username and _password == pwd: # 强制缩进,省掉了结构符
print("Welcome user {name} login ".format(name=username))
else:
print("Invalid username or password")
# IndentationError缩进错误
11.if else的使用
age_of_Eleanor = 26
guessAge = input("Please guess age:") #输入猜测的年龄
guessAge = int(guessAge)
if guessAge == age_of_Eleanor :
print("Yes, you got it")
elif guessAge > age_of_oldboy: # else if=elif
print("rethink smaller")
else:
print("rethink bigger")
12.while的使用 (基本上和java一样 只是没有结构符-各种括号 而已,break和continue也是一样)
(1)while和break的结合使用
count = 0
while count < 100:
print("count=", count)
count = count + 1
if count == 99:
break
执行结果:
(2)while和if-elif-else的结合使用
age_of_Eleanor = 26
guessAge = input("Please guess age:")
guessAge = int(guessAge)
count = 0
while guessAge != age_of_Eleanor:
if count >= 3:
print("no chance")
break
if guessAge == age_of_Eleanor:
print("Yes, you got it") # 输入正确后直接break结束程序执行
break
elif guessAge > age_of_Eleanor: # else if
print("rethink smaller")
else:
print("rethink bigger")
flag = input("keep going?Y or N :") # 输入错误时,由用户判断是否继续
if flag == "N":
break
guessAge = input("Please guess age:")
guessAge = int(guessAge)
count += 1
else: # while和else 可以联用
print("at the else of while-else")
print("end of the while process")
执行结果(1):不满足while条件
如果break跳出来的时候 不满足while条件 执行while-else的else
即break跳出来时 guessAge=26
while条件 guessAge != age_of_Eleanor 不成立为false
执行while-else 中的 else,即"at the else of while-else"
执行结果(2):满足while条件
如果break跳出来的时候 满足while条件 不执行while-else的else
即break跳出来时 guessAge=22
while条件 guessAge != age_of_Eleanor 成立为true
不执行while-else 中的 else,即"at the else of while-else"不出现
13.for的使用
(1)for和continue的结合使用
1 for i in range(10):
2 if i == 7:
3 print("missing 7")
4 continue
5 print("i=", i)
(2)for循环的增量
1 for i in range(10): # 每次增加默认1,默认从0开始,即由0至10
2 print("loop:", i)
3
4 for i in range(0, 10, 2): # 从0开始到10结束,每次增加2
5 print("loop:", i)
(3)双层for循环(和java一样)
count = 1
for i in range(1, 10):
for j in range(1, 10):
print("No.", count, ": i=", i, ",j=", j)
count += 1
if j >= 5:
break
(4)for和if else的结合: for可以与else连用(与java不一样)
age_of_Eleanor = 26
guessAge = input("Please guess age:")
guessAge = int(guessAge)
for count in range(3): # 0,1,2,3:从0开始,共4次
if guessAge == age_of_Eleanor:
print("Yes, you got it")
break
elif guessAge > age_of_Eleanor: # else if
print("rethink smaller")
else:
print("rethink bigger")
guessAge = input("Please guess age:")
guessAge = int(guessAge)
else:
print("no chance")
print("end of the for-else")
执行结果(1)猜中:break执行后,整个for-else退出
执行结果(2)未猜中四次后,for循环结束退出执行for-else中的else
14.课后练习
关于txt文件的读和写,参考文章:
python读取、写入txt文本内容
# _*_coding:utf-8_*_
# Author:Eleanor Jiang
# 编写登陆接口
# 输入用户名密码
# 认证成功后显示欢迎信息
# 输错三次后锁定
import getpass
file_name = "UserList.txt"
# 读文件内容
# read():一次性读全部内容
with open(file_name, "r") as f: # 打开文件
data = f.read() # 读取文件
print(str(type(data)))
print(data)
# readline()读取第一行内容
with open(file_name, "r") as f: # 打开文件
data = f.readline() # 读取文件
print(str(type(data)))
print(data)
# readlines()读列表
with open(file_name, "r+") as f: # 打开文件
data = f.readlines() # 读取文件
print(str(type(data)))
print(data)
for i in data:
infos = i.split(" ")
print(str(type(data)))
print(infos)
print(infos[0])
# 输入用户名密码
input_username = input("Please enter your username:")
input_password = getpass.getpass("Please enter your password:")
count = 1
# print("username:", input_username, ",password:", input_password)
MAX_COUNT = 3
default_username = ""
default_password = ""
lineNo_in_txt = 1
while count <= MAX_COUNT:
if default_username == "":
# 认证用户信息
for i in data:
# 分割字符串
infos = i.split(" ")
if infos[0] == input_username:
default_username = infos[0]
default_password = infos[1]
locked_flag = not bool(infos[2].find("unlocked") >= 0)
break
lineNo_in_txt += 1
if default_username == "":
# 检测账号是否存在
print("User not existed.")
break
if locked_flag:
# 如果账号被锁定
print("Account:", input_username, " is locked.")
break
if input_username == default_username and input_password == default_password:
# 认证成功后显示欢迎信息
print("Welcome to login,", input_username)
break
else:
# 认证失败后剩余次数
print("Username or password may be incorrect, please try it again,", MAX_COUNT - count + 1, " chances left")
count += 1
# input_username = input("Please enter your username:")
input_password = getpass.getpass("Please enter your password:")
else:
# 输入三次后锁定
print("Account:", input_username, " is locked.")
new_data = data
new_data[lineNo_in_txt - 1] = new_data[lineNo_in_txt - 1].replace("unlocked", "locked")
print("No ", lineNo_in_txt, "is updated")
# 清空源文件
f = open(file_name, "r+")
f.truncate()
for i in new_data:
f.write(i)
f.flush()
f.close()