首页 > 技术文章 > Python 基础(一)

lazyfennec 2017-01-13 13:48 原文

python 2 和 3 的最大的区别: py 3 提供了对Unicode的支持

很多内容都已经支持3.0 ,但是还有一个很大的模块没有支持:twisted  

第一个程序Helloworld:

1 print('hello world!') hello world
Hello World

 

退出命令行条件下的解释器:

>>>exit() 

 

外部创建python文件,文件名后缀为什么要.py?  

  为了告知别人这是一个python文件,这是一种规范

windows下运行python 文件:

>>>python hello.py

linux 下应该如何直接运行:

先更改文件的权限:chmod 755 hello.py  

因为在linux在系统中装了新版本的python 是默认装在 usr/local/bin/下 另外在文件中应该加入:

  #!usr/bin/env python   表示在系统环境变量找python解释器,其中env表示在环境变量中查找,可以使用使用系统默认的python

  #!usr/bin/python        表示在usr/bin 中直接找,直接用的系统原装的python       

闲扯淡,各种版本的hello world

 1 #include <iostream> 
 2 
 3 int main(void) 
 4 
 5 {  
 6 
 7   std::cout<<"hello world!";  
 8 
 9   return 0; 
10 
11 }
c++

 

 1 #include<stdio.h> 
 2 
 3 int main(void) 
 4 
 5 {
 6 
 7   printf("hello world!");  
 8 
 9   return 0; 
10 
11 }
C

 

1 public class HelloWorld{
2 
3    public static void main(String [] args){
4 
5        System.out.println("hello world!");  
6 
7   } 
8 
9 }   
JAVA

 

1 <?php  
2 
3   echo"hello world!" 
4 
5 ?>
php

 

1 puts"hello world!"
ruby

 

1 package main
2 import "fmt"
3 func main()
4 {
5  fmt.printf("hello world!");
6 }
go

 

开发工具:
建议使用pycharm,可以使用社区或者专业版
使用原因,有提示,界面友好,可以调试,可以直观运行。其中主要的是能够调试

关于变量:
变量:为了存放内容(数据)让后面的代码进行调用而存在的。

python 是一门动态语言,不需要进行变量类型的声明,默认存成string 即字符串类型。
 

name = "Fennec"
name = "Fennec"
name2 = name
print("My name is ",name,name2)

name = "LazyFennec"

name = "LazyFennec"
print("My name is ",name,name2)

#(question what is the name2 now)
关于变量的值得一个操作的思考

解析:变量的赋值其实是指向内容的,其内容是在内存中的,当其另外赋值的时候,也就是在另一块内存中另外存一个内容然后再指向这个新的内容,那么对应的原来的内容还是没有变化的,故name2还是指向原来的Fennec

 变量定义的规则:
   变量只能是字母、数字或者下划线的任意组合
   变量名的第一个字符不能是数字
   关键字不能作为变量名,具体如下列表所示:

[and,as,assert,class,continue,def,elif,else,except,exec,finally,for,from,global,if,import,in,is,lambda,not,or,pass,print,raise,return,try,while,with,yield]

变量的约定俗成:
  命名一定要能够看出来是什么意思

  对于比较复杂的变量名有两种表示方式:

 

  下划线:my_name = "Fennec"  

  驼峰式:MyName = "Fennec"

 

 

 

极其不推荐的命名方式:

  xingming = "Fennec"
  姓名 = "Fennec"

这两种都是很low的

python中没有常量,如果想表示一个常量,则应该大写:

PIE = 3.1415926

大写表示这个变量不应该修改。 

 

对于字符编码的区别和介绍:

二进制      0 1
ASCII    8位,可以表示255个符号,其中整个西方世界用了127个
GB2312      1980年,一共收入7445个字符
GBK1.0     1995年,21886个汉字,中国最常用的
GB18030   2000年,27484个汉字

 

Unicode: 显然ASCII码无法将世界上各种文字和符号全部表示,所以,就需要一种可以代表所有字符和符号的编码,即:Unicode(统一码,万国码,单一码)

 其规定了现有的字符和符号最少由16位来表示(2个字节),即:2**16 = 65536。注:此处说的是最少,即有可能更多。

UTF-8:是对Unicode码的压缩版,可边长的,所有的英文单词字符,在utf-8中存的时候是用ascii码使用1byte,对于中文来说使用utf8时使用3bytes(1bytes=8bit)

 

执行以下程序:

name = "你好,世界!"
print(">>>",name)

 

在python2中会有编码方面的问题,所以程序会报错。

应该在第一行加入

# -*- coding:utf-8 -*-

因为在python 3中默认使用utf8,所以不存在这种问题。

会直接输出

>>>你好,世界!

注释:
  单行注释 #
  多行注释
  '''……
  内容
  ……'''

多个(3个)引号除了注释,还可以打印多行

msg = '''
there are so
many words
you can see.
'''

print(msg)
例子

打印结果;

there are so
many words
you can see.

用户交互:
关于input:

username = input("username")
password = input("password")

print(username,password)

关于格式化输出:

 

name = input("name")
age = input("age")
job = input("job")
info = '''
--------info of '''+name+'''--------
Name:'''+name+'''
Age:'''+age+'''
Job:'''+job
print(info)
第一种形式

 

name = input("name")
age = input("age")
job = input("job")
info = '''
--------info of %s--------
Name:%s
Age:%s
Job:%s''' %(name,name,age,job)
print(info)
第二种形式

ps:%s表示输入字符串,另外的还有%d,%f等等。

另外可以把上面的age改成%d,这个时候再运行程序会报错,因为格式不是数字

name = input("name")
age = input("age")
job = input("job")
info = '''
--------info of %s--------
Name:%s
Age:%d
Job:%s''' %(name,name,age,job)
print(info)
类型问题

检测方式

print(type(age))
>>> <class 'str'>
        

 此时需要进行类型转换
 

age = int(input("age"))

正确的程序如下:

name = input("name")
age = int(input("age"))
job = input("job")
info = '''
--------info of %s--------
Name:%s
Age:%d
Job:%s''' %(name,name,age,job)
print(info)

关于python2中raw_input和input的区别:
 python3中input和python2中raw_input 是同一种东西,而python2中的input是一种输入的是什么就是样的就是什么样的格式的语法,不建议使用,忘记就好。

name = input("name")
age = int(input("age"))
job = input("job")
info = '''
--------info of {_name}--------
Name:{_name}
Age:{_age}
Job:{_job}'''.format(_name = name,
                     _age = age,
                     _job = job)
print(info)
第三种形式
name = input("name")
age = int(input("age"))
job = input("job")
info = '''
--------info of {0}--------
Name:{0}
Age:{1}
Job:{2}'''.format(name,age,job)
print(info)
第四种形式

关于用户密码问题

username = input("username")
password = input("password")

print(username,password);

以上会密码会直接在输入时显示,结果如下

>>>username:fennec
>>>password:123456
>>>fennec 123456

可以使用getpass屏蔽密码显示

import getpass
username = input("username")
password = getpass.getpass("password")

print(username,password);

显示结果:

>>>username:fennec
>>>password:

>>>fennec 123456

  注意,上面的getpass一般只在cmd中有效,在编程软件中如PyCharm无效

 

if else 条件跳转语句

#!/usr/bin/env python
# -*- coding:utf-8 -*-
# Author:Fennec D

_username = "fennec"
_password = "123456"
username = input("username:")
password = input("password:")
if _username == username and _password == password:
    print("Welcome user {name} login...".format(name=username))
else:
    print("Invalid username or password!")

while 循环

#猜数字

number = 41
count = 0
while count<3:
    count += 1
    guess_num = int(input("guess the number:"))
    if guess_num== number:
        print("oh yeah,you got it!")
        break
    elif guess_num<number:
        print("you may try to guess the bigger one.")
    else:
        print("you may try to guess the smaller one.")
else: #python 特有的,其他语言并不支持那么做
    print("hey man,you have tried so many times, you lose the game")

for 循环

#for循环

for i in range(10):
    print(i)
#猜数字
number = 41
count = 0
for count in range(3):
    count += 1
    guess_num = int(input("guess the number:"))
    if guess_num== number:
        print("oh yeah,you got it!")
        break
    elif guess_num<number:
        print("you may try to guess the bigger one.")
    else:
        print("you may try to guess the smaller one.")
else:
    print("hey man,you have tried so many times, you lose the game")

#这里同样可以用else,原因是,这里的else 是指上面的内容如果正常执行结束,则执行else的内容,否则如果被break,则不执行
#for循环
for i in range(0,10,2):#这里的range 的三个参数分别表示 开始位置,结束位置,步长
    print(i)

 

continue

#continue
for i in range(10):
    if i<3:
        print("i:",i)
    else:
        continue #跳出本次循环,执行下一次循环
    print("hehe...")

 

1 for i in range(1,10):
2     for j in range(1,i+1):
3         print("{0} * {1}= {sum}".format(i,j,sum=i*j),end="\t")
4     print()
九九乘法表


效果:

 

推荐阅读