python第一天基础1-2
python入门
1 第一个python代码:
在linux上创建第一个.py脚本
- #!/usr/bin/env python
- #-*- coding:utf-8 -*-
- print "Hello,World"
执行代码:
- python hellp.py
2 捕获参数:
捕获参数,并存入到集合
- print sys.argv
3 模块导入:
- import hello
4 python编译:
经过编译 成字节码文件 .pyc文件,反编译成 .py
如果.pyc 和 .py 内容相同,则.pyc 优先级高,否则,先查找.py,再重新编译生成 .pyc 文件
5.变量:
声明变量:
- name = "Hello,World"
变量命名规则:
1)变量名只能以 数字、字母、下划线组成
2)第一个字符只能为字母、下划线;不能为数字
3)不要使用内置变量名
- name1 = "test1"
- name1 = name2
修改 name1 = "123"
name2 的值会跟着变吗?
答案是:不变
原因很简单:变量赋值时,会在内存中申请一块内存指针空间,将test1 赋值给 name1,相当于开辟了一块内存指针空间来存放 字符串test1,同时将 name2 = name1,相当于将 name2也同样指向这块内存指针空间,如果这个时候将字符串 “123”赋值给 name1,就相当于重新在内存中开辟一块内存指针来存储字符串 “123”,而name2 指针还是第原来的内存指针空间,所以name2的值并不会随着name1的改变而变化。
字符串特性:一旦修改,重新创建
以下是分配两块地址池的:
- id1 = 7
- id2 = 7
id(id1),id(id2) 指针地址一样,同一块内存指针池(看起来一样,是内部进行优化的,相当于在内部循环了一遍,当循环了一遍之后,发现有一个id1也是这个地址,于是也将id2指向这个地址,实际上是开辟两块指针空间的)
如果缓冲池过大,就会新开辟一块空间,缓冲池就会将多的扔掉
- id1 = 700
- id2 = 700
id(id1),id(id2) 指针地址不一样
变量一般可以这样定义:
age_of_oldboy= 20 ##一般用这种
ageOf_Oldboy=20 ##驼峰定义
AGEOFOLDBOY=20###java中常量这么定义
6 流程控制:
- user_name = raw_input("please enter Your name:")
- if user_name == "Allen":
- print "one!"
- elif user_name == "yyh":
- print "Two!"
- elif user_name == "ali":
- print "Three!"
- else:
- print "Invalid User!"
输入用户名和密码:
------------------------------------------
import getpass
name = input("姓名:")
pwd = getpass.getpass("密码:")
if name == "sun" and pwd == ("123"):
print ("welcome")
else:
print ("wrong username")
-------------------------猜年龄----------------------------------
age = 30
user_input = int( input("年龄:") ) ###int 将字符串转换成数字,因为字符串是不能和数字比大小的
if user_input == age:
print ("welcome")
elif user_input > age:
print ("猜小点")
else:
print ("猜大点")
------------------------------------
7.数据类型,分为两部分:数字,字符串,列表,元组,字典
1)、单值
a.数字 : 整型、长整型、浮点、复数 - (py3中已经没有长整型了)
b.布尔值: 真或假 、1 或 0 -
c.字符串: “hello wolrd”
2)、集合:
列表、元组、字典、哈希表
3)、字符串:
万恶的字符串拼接: print (r'a\ndf') r表示我写什么打印出来就是什么
python中的字符串在C语言中体现为是一个字符数组,每次创建字符串时候需要在内存中开辟一块连续的 空,并且一旦需要修改字符串的话,就需要再次开辟空间,万恶的+号每出现一次就会在内从中重新开辟一块空间。
a).字符串传值:
字符串格式化:
- name = "I'm %s" % 'allen'
- name = "I'm %s, age: %d" % ('allen',25)
- 其中%s,%d 是占位符,%s代表字符串,%d 代表数字 ,% 后面的值是实际传入的参数,用来替换%s,和%d的值
- name = "I'm {0},age:{1}"
- new_name = name.format('allen',25)
- print new_name
利用模板去加载模板(python3中只有input这个和py2中的raw_input一样)
name = input("姓名:")
age = input("年龄:")
job = input("工作:")
hobby = input("爱好:")
info = '''
--------info of %s-------------
name:%s
age:%s
job:%s
hobby:%s
----------end------------------------
''' %(name,name,age,job,hobby)
print (info)
b) 打印字符串:
- print 'name' #使用单引号
- print "name" #使用双引号
- print """ #使用三引号,打印多行
- I'm is allen,
- age is 25
- """
c) 字符串切片:
- name = "allen"
- name[0] #打印索引为0的值,输出值:a
- name[0:2] #打印索引从0 到 2 的值,不包括2(即<),输出值为:al
- name[-1] #打印最后一个,输出值:n
- name[:-1] #打印索引从0开始至倒数第二个字符,不包括自己,输出值:alle
d) 统计长度
len(name) #统计字符串长度
e) 去除两边的字符
- name.strip() #去除两边的空格
- name.lstrip() #去除左边的空格
- name.rstrip() #去除右边的空格
f) 分割
- name = "allen,25,wonderful"
- name.split(',')
8.列表
- a) 创建列表:
- name_list = ['allen','yyh','ali','']
- name_list = list(['allen','yyh','ali',25])
- b) 追加
- name_list.append('hello')
- c) 删除
- del name_list[0]
- name.remove("sunbo")#####直接删除列表中的元素
- name.pop(0)####删除下表的元素,并返回元素,如果不交o则删除列表最后一个元素
- d) john (列表变成字符串) "".join(name_list) e) in (包含,判断元素是否在列表中) "allen" in name_list
f)插入
- name = ["gaolong","wangyuangeng","sunlixue"]
print (name)
name.insert(1,"sunbo")
1=====是列表的索引
"sunbo"====需要插入的字符串
['gaolong', 'sunbo', 'wangyuangeng', 'sunlixue']- g) 改
- name = ["gaolong","wangyuangeng","sunlixue"]
print (name)
name[0]="longlong"
print(name)- h)查
- print (name[-3:])###获取后三个元素
- print(name.index("wangyuangeng")) ###取元素的下标,如果列表中有重复的元素,只能返回第一个元素
- print(name.count("sunbo")) ###返回列表中的元素个数
- 两个列表合并
name = ["gaolong","wangyuangeng","sunlixue","sunbo","tiansuli"]
name1=["wangxiang","shenzhaohui"]
name.extend(name1)
print(name)
- 列表翻转 name = ["gaolong","wangyuangeng","sunlixue","sunbo","tiansuli"]
name.reverse()
print (name)- 排序####py3中不能数字和字符串混这排序,会报错,但py2中没有这限制
- name = ["gaolong","wangyuangeng","sunlixue","sunbo","tiansuli"]
name.sort()
print(name)- 深浅copy
- name = ["gaolong","wangyuangeng","sunlixue","sunbo","tiansuli"]
name2=name.copy()####新数据与原数据用的不同的内存地址,原数据改变新数据不会更改,
name3=name####这种会随元数据改变而改变,而元素的复制是不会改变的,这是因为py会根据数据量的大小去判断需不需要重新开一个新的内存改存放数据
print ( name2,id(name),id(name2))
print ( name3,id(name),id(name3))
name.pop()
print("-----print-----")
print ( name2,id(name),id(name2))
print ( name3,id(name),id(name3))
['gaolong', 'wangyuangeng', 'sunlixue', 'sunbo', 'tiansuli'] 4731608 4731648
['gaolong', 'wangyuangeng', 'sunlixue', 'sunbo', 'tiansuli'] 4731608 4731608
-----print-----
['gaolong', 'wangyuangeng', 'sunlixue', 'sunbo', 'tiansuli'] 4731608 4731648
['gaolong', 'wangyuangeng', 'sunlixue', 'sunbo'] 4731608 4731608
9.元组 (没有增删改),其他和列表一样
- ("allen","ali","yyh")
总结:
列表(list),字符串(str),元组(tuple)
共同点:
切片、索引、len() 、in
不同点:
str:重新开辟空间
list:修改后,不变
元组(tuple):
不允许修改
10.for 循环:
- name_list = ['allen','yyh','ali','']
- for item in name_list:
- if item == "yyh":
- print "diu diu ..."
- continue
- if item == "ali":
- print "welcome to here!"
- break # 跳出循环
- 猜年龄,3次退出# -*- coding: utf-8 -*-
- age = 20
for i in range(3):
guess_age= int(input("输入年龄:"))
if age == guess_age:
print ("correct")
#break
elif age > guess_age:
print ("try bigger")
else:
print ("try smaller")- else:###如果for循环正常结束,就执行else下的语句
exit("退出")
需求一:还是上面的程序,但是遇到小于5的循环次数就不走了,直接跳入下一次循环
1
2
3
4
|
for i in range ( 10 ): if i< 5 : continue #不往下走了,直接进入下一次loop(跳出当前循环,继续下一次循环,只跳一层) print ( "loop:" , i ) |
需求二:还是上面的程序,但是遇到大于5的循环次数就不走了,直接退出
1
2
3
4
|
for i in range ( 10 ): if i> 5 : break #不往下走了,直接跳出整个loop(跳出整个当前层循环) print ( "loop:" , i ) |
11.while 循环:
- while 条件:
- print "ok ok ok"
- while True: # 死循环
- print 'true'
- flag = True #标记位
- while flag:
- print "ok ok ok"
- flag = False
有一种循环叫死循环,一经触发,就运行个天荒地老、海枯石烂。
海枯石烂代码
1
2
3
4
5
|
count = 0 while True : print ( "你是风儿我是沙,缠缠绵绵到天涯..." ,count) count + = 1 |
其实除了时间,没有什么是永恒的,死loop还是少写为好
上面的代码循环100次就退出吧
1
2
3
4
5
6
7
8
|
count = 0 while True : print ( "你是风儿我是沙,缠缠绵绵到天涯..." ,count) count + = 1 if count = = 100 : print ( "去你妈的风和沙,你们这些脱了裤子是人,穿上裤子是鬼的臭男人.." ) break |
回到上面for 循环的例子,如何实现让用户不断的猜年龄,但只给最多3次机会,再猜不对就退出程序。
- 第一种方法
# -*- coding: utf-8 -*-
count = 0
longlong_age=50
while count<5:
guess_age=input("请输入高龙年龄:")###输入的都是字符串格式
if guess_age.isdigit():###通过字符串内置方法,判断是不是数字
guess_age=int(guess_age)###如果不是数字,就用int方法转换为数字
else:
continue###否则,不是数字的(字符串,和空格等)则退出本次循环,
if guess_age==longlong_age:
print ("你才对了")
break
elif guess_age>longlong_age:
print("你才的太小了")
else:
print("你猜的太大了")
count+=1
else:
print("太笨了,猜了这么多次,还没猜对")
第二种方法
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
#!/usr/bin/env python # -*- coding: utf-8 -*- my_age = 28 count = 0 while count < 3 : user_input = int ( input ( "input your guess num:" )) if user_input = = my_age: print ( "Congratulations, you got it !" ) break elif user_input < my_age: print ( "Oops,think bigger!" ) else : print ( "think smaller!" ) count + = 1 #每次loop 计数器+1 else : print ( "猜这么多次都不对,你个笨蛋." ) |
12.字典,键值对 (字典无序,特殊的for循环)
- person = {
- "name":"allen",
- "age":"",
- "gender":"man",
- }
- #person['name']
- for k,v in person.items(): #字典无序
- print k,v
- person.keys() #所有key
- person.values() #所有value
- person.items() #所有元素
13.运算符
- a) 算数运算:+ - * / % ** //
- b) 比较运算:== != < > >= <=
- c) 赋值运算:= += -= *= /= %= **/ //=
- d) 逻辑运算:and or not
- e) 成员运算:in not in
- f) 身份运算:is is not
- g) 位运算:& | ^ ~ >> <<
14.文件操作:
- file_list = open('filename.txt','r')
- or
- file_list = file('filename.txt','r')
- for line in file_list.read():
- print line # 全量读
- for line in file_list.readlines():
- print line # 读取所有行,(列表)
- for line in file_list.xreadlines():
- print line # 一行一行读(每次只读一行)
需求:将用户每登陆一次,记录一次登陆次数(通过操作文件实现)
log.txt文件内容格式如下:
sun;123;3
bo;123;4
- #!/usr/bin/env python
- #-*- coding:utf-8 -*-
- file_obj = file('test.txt','r+')
- line_list = file_obj.readlines()
- my_list = []
- for ele in line_list:
- line = ele.strip()
- value_list = line.split(';')
- last_value = int(value_list[-1])
- last_value += 1
- value_list[-1] = str(last_value)
- value_str = ';'.join(value_list)
- my_list.append(value_str)
- file_obj.seek(0)
- my_str = '\n'.join(my_list)
- file_obj.write(my_str)
- file_obj.close()
python第一天基础1-2的更多相关文章
- Python第一章-基础知识
第一章:基础知识 1.1 安装python. 直接官网下载最新的python然后默认安装就可以了,然后开始菜单里找到pyhton *.*.* Shell.exe运行python的交互shell ...
- python第一课--基础知识
python简介 Python是一种计算机程序设计语言.是一种面向对象的动态类型语言,最初被设计用于编写自动化脚本(shell),随着版本的不断更新和语言新功能的添加,越来越多被用于独立的.大型项目的 ...
- python第一天基础1-1
win下是没有多进程的 windows:1.下载安装包 https://www.python.org/downloads/2.安装 默认安装路径:C:\python273.配置环境变量 [右键计算机] ...
- Python 第一章 基础知识
如果熟其他计算机语言,可能会习惯于每行以分号结束.Python则不同,一行就是一行,不管多少. 如果喜欢的话,可以加上分号,但是不会有任何作用(除非同一行还有更多的代码),而且这也不是同行的做法. & ...
- python第一模块基础语法
一·python和各大高级语言的优缺点比较 1.c语言开发效率低 2.c++开发效率高于c语言,低于java,python. 3.java代码臃肿,设计复杂,库繁杂量多. 4.PHP应用领域单一,且运 ...
- Python之路,第一篇:Python入门与基础
第一篇:Python入门与基础 1,什么是python? Python 是一个高层次的结合了解释性.编译性.互动性和面向对象的脚本语言. 2,python的特征: (1)易于学习,易于利用: (2)开 ...
- Python学习笔记基础篇——总览
Python初识与简介[开篇] Python学习笔记——基础篇[第一周]——变量与赋值.用户交互.条件判断.循环控制.数据类型.文本操作 Python学习笔记——基础篇[第二周]——解释器.字符串.列 ...
- [Python] 文科生零基础学编程系列二——数据类型、变量、常量的基础概念
上一篇:[Python] 文科生零基础学编程系列--对象.集合.属性.方法的基本定义 下一篇: (仍先以最简单的Excel的VBA为例,语法与Python不同,但概念和逻辑需要理解透彻) p.p1 { ...
- Linux系统shell编程自学_第一章基础
第一章 基础shell的优势在于处理操作系统底层的业务,Python,php的优势在于开发运维工具,web界面的管理工具以及web业务开发.处理一键安装.优化.报警脚本shell又叫命令解释器,它能识 ...
随机推荐
- Lambda GroupBy Sum
DataTable dt = new DataTable(); dt.AsEnumerable().GroupBy(r => r["ShopName"]) .Select(g ...
- ajax data传值
如果要我们要把整个form1表单中的输入框都传过去可以用data:$("#form1").serialize(), 但是我们如果还要传一个不在form中的值呢? 可以使用下面这种方 ...
- maven依赖关系中Scope的作用
目前<scope>可以使用5个值: (1) compile (编译) compile是默认的范围:如果没有提供一个范围,那该依赖的范围就是编译范围.编译范围依赖在所有的classpat ...
- MSIL Emit AOP
参考链接: https://pieterderycke.wordpress.com/tag/reflection-emit/ http://www.moon-soft.com/doc/23252.ht ...
- Servlet学习四——传输文本
在最初使用Servlet时,觉得get方法很好用,也了解到传输一般性的变量,除了文件流和安全性外,都可以用get方法,所以,也就习惯用get方法了. 在实现一个注册方法过程中,中文注册都是乱码,跟踪后 ...
- mongodb遇到的错误
1. [root@localhost bin]# ./mongod -dbpath /data/db --logpath /usr/local/mongodb/log --13T18:: F CONT ...
- 将mac上的项目上传到oschina,进行代码托管。
1.首先看一下自己是否有公钥, 在 我的资料-->SSH公钥 查看,如果没有,添加自己的SSH 公钥: SSH key 可以让你在你的电脑和 Git @ OSC 之间建立安全的加密连接. 2. ...
- div+css的第一个布局
---恢复内容开始--- 这个东西说难也不难,但也要详细思虑一番: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional/ ...
- 假装这些是MyEclipse的快捷键(1)
Java快捷键 Alt + / 代码自动补全Alt + Shift + S 功能菜单 Ctrl + 1 代码自动修正Ctrl + / 单行注释/取消Ctrl + O 查看类的所有方法Ctrl + T ...
- char类型输出地址
问题描述: 当输出char的地址时,发现输出的是一个字符: char ch = 'a'; cout<<&ch<<endl;//a @ 因为cout得到一个char类型的 ...