【python核心编程笔记+习题】-CH2-变量与赋值

本章主题

 输入/输出 
 注释
 操作符
 变量与赋值 
 Python 类型 
 缩进
 循环与条件 
 文件 
 错误 
 函数
 类
 模块

 

  1. 笔记

Python 的主提示符( >>> )和次提示符( ... )。主提示符是解释器告诉你它在等待你 输入下一个语句,次提示符告诉你解释器正在等待你输入当前语句的其它部分。

python通过语句和表达式(函数、算术表达式)完成要求。

>>> print 'Hello World!'
Hello World!

语句--有关键字;

表达式--没有关键字,可以由是使用数学运算符构成的算术表达式,也可以是使用括号调用的函数。在 Python 中未指定返回值的函数会自动返回 None,等价于 NULL。

print 语句调用 str()函数显示对象,而交互式解释器则调用 repr()函数来显示对象.

下划线(_)在解释器中有特别的含义,表示最后一个表达式的值.

>>> print "%s is number %d!" % ("Python", 1)
          Python is number 1!
符号 >> 用来重定向输出, 输出重定向到日志文件的例子:
#coding=utf-8
logfile = open('/Users/amandama/Desktop/tmp/mylog.txt','a')
print >> logfile, 'Fatal error: invalid input!'
logfile.close()

用户输入使用内建函数 raw_input() 文本输入;数值字符串输入并转为整数 使用内建函数 int()

如果需要得到一个生疏函数的帮助,只需要对它调用内建函数help()。通过用函数名作为 help()的参数就能得到相应的帮助信息:

>>> help(raw_input)

:q 退出

  •  操作符

标准算术运算符    + - * / // %  **

标准比较运算符    < <= > >= == != <>

逻辑运算符    and or not

使用逻辑运算符可以将任意表达式连接在一起,并得到一个布尔值

Python 有两种除法运算符,单斜杠用作传统除法, 双斜杠用作浮点除法(对结果进行四舍五入);乘方运算符, 双星号(**);Python 目前支持两种“不等于”比较运算符, != 和 <>, 推荐使用!=

  • 变量和赋值

Python 变量名是大小写敏感的;Python 是动态类型语言, 也就是说不需要预先声明变量的类型。 变量的类型和值在赋值 那一刻被初始化。变量赋值通过等号来执行。

支持增量赋值方式就是:

n *= 10

Python 不支持 C 语言中的自增 1 和自减 1 运算符

Python 支持五种基本数字类型:int 有符号整数、 long 长整数 、bool布尔值、float浮点值、complex复数、decimal十进制浮点数

  1. Python 的长整数所能表达的范围远远超过 C 语言的长整数, 事实上, Python 长整数仅受限于用户计算机的虚拟内存总数;

  2. 必须先导入 decimal 模块才可以使用这种数值类型

使用索引运算符( [ ] )和切 片运算符( [ : ] )可以得到子字符串。字符串有其特有的索引规则:第一个字符的索引是 0, 最后一个字符的索引是 -1

加号( + )用于字符串连接运算,星号( * )则用于字符串重复

  • 列表和元组

当成普通的“数组”,它能保存任意数量任意类型的 Python 对象.列表元素用中括号( [ ])包裹,元素的个数及元素的值可 以改变。元组元素用小括号(( ))包裹,不可以更改(尽管他们的内容可以)。元组可以看成是 只读的列表。通过切片运算( [ ] 和 [ : ] )可以得到子集。

  • 字典

值可以是任意类型的 Python 对象,字典元素用大括号{ }包裹

在某字典中增加键值对---- aDict['port']=8080     

读取字典的key----  aDict.keys()

读某一键的值 ----aDict['host']

循环遍历每个键 for key in aDict:

                       print key, aDict[key]

aDict = {'host' : '10.33.12.33'}
print (aDict)

aDict['port']=8080
print (aDict)
print (aDict.keys())
print (aDict.values())
print('-'*20)
for key in aDict:
    print( key, aDict[key])

代码块通过缩进对齐表达代码逻辑而不是使用大括号

条件条达式并不需要用括号括起来

if-elif-else 语句

语句待补充                         

  • 模块

导入模块 import module_name

模块的属性(函数、变量)访问:module.function()  module.variable

PEP:    python增强提案

help退出方式  help> q

常见内建函数:

dir([obj]) 

  help([obj])   

int(obj) 

 len(obj)   

open(fn,mode)   

range([start,] stop[,step]) 

raw_input(str)

str(obj)

type(obj)

2、练习

2–1. 变量, print 和字符串格式化运算符。启动交互式解释器。给一些变量赋值(字符串,数值等等)并通过输入变量名显示它们的值。再用 print 语句做同样的事。这二者有 何区别? 也尝试着使用字符串格式运算符 %, 多做几次, 慢慢熟悉它。

2–2. P 程序输出, 阅读下面的 Python 脚本:

#!/usr/bin/env python

1+2*4

(a) 你认为这段脚本是用来做什么的?
(b) 你认为这段脚本会输出什么?
(c) 输入以上代码,并保存为脚本,然后运行它。它所做的与你的预期一样吗?为什么一样/不一样?

.#!/usr/bin/python的意思是说去/usr/bin/目录下找python去执行

.#!/usr/bin/env python 的意思是在#!/usr/bin/env中找到python的安装路径,然后去执行它,这个可执行的python路径不管是不是在/usr/bin下,用法比较灵活,而#!/usr/bin/python就写成了绝对路径,只能去/usr/bin下找。

(d) 这段代码单独执行和在交互解释器中执行有何不同?试一下,然后写出结果

在脚本里 1+3**2 报错,需要增加print()

在命令行 1+3**2

都能输出结果

(e) 如何改进这个脚本, 以便它能和你想像的一样工作? print(1+3**2)
2–3. 数值和运算符
启动交互解释器,使用 Python 对两个数值(任意类型)进行加、减、乘、除运算。然后使用取余运算符来得到两个数相除的余数, 最后使用乘方运算符求 A 数的 B 次方。

2–4. 使用 raw_input()函数得到用户输入

(a) 创建一段脚本使用 raw_input() 内建函数从用户输入得到一个字符串,然后显示这个用户刚刚键入的字符串。

通过命令行

>>> inputName=raw_input("please input your English name:")
please input your English name:Amanda
>>> inputName
'Amanda'
>>> print inputName
Amanda

通过pycharm

MyName = input("please input your English name:")
print('My name is: %s' % MyName)

(b) 添加一段类似的代码,不过这次输入的是数值。将输入数据转换为一个数值对象,(使 用 int()或其它数值转换函数) 并将这个值显示给用户看。

print('My name is: %d' % int(MyName))

2–5. 循环和数字
分别使用 while 和 for 创建一个循环:
(a) 写一个 while 循环,输出整数从 0 到 10。(要确保是从 0 到 10, 而不是从 0 到 9 或从1到10)

count=0
while (count<11):
    print(count)
    count+=1

(b) 做同 (a) 一样的事, 不过这次使用 range() 内建函数。

for i in range(11):
    print (i)

2–6. 条件判断 判断一个数是正数,还是负数, 或者等于 0. 开始先用固定的数值,然后修改你的代码支持用户输入数值再进行判断。

i= int(input("Please enter a number:"))
if i<0:
    print("输入的数字是负数")
elif i>0:
    print(("输入的数字是正数"))
else:
    print("输入的数字是0")

2–7.循环和字串 从用户那里接受一个字符串输入,然后逐字符显示该字符串。先用 while 循环实现,然后再用 for 循环实现。

while:
istr=0
str = input("Please enter a string:")
#print(len(str))
while istr<len(str):
   print (str[istr])
   istr+=1

for:

print("^for"*60)
for fstr in range(len(str)):
    print(str[fstr])

2–8. 循环和运算符 创建一个包含五个固定数值的列表或元组,输出他们的和。然后修 改你的代码为接受用户输入数值。 分别使用 while 和 for 循环实现。

blist=(2,6,5);//定义一个列表  bTuple=[2,6,5] //定义一个元组
print (blist[-1])
print(blist[0]+blist[1]+blist[2])
sum1=0
bint=0
blist=(2,6,5)
while bint<len(blist):
    sum1 = sum1+(blist[bint])
    bint += 1
print(sum1)
print("#"*60)
sum1=0
bint=0
blist=input("please enter your list:")
for bint in range(len(blist)):
    sum1 = sum1+int((blist[bint]))
print(sum1)

2–9.

循环和运算符 创建一个包含五个固定数值的列表或元组,输出他们的平均值。本练习的难点之一是通过除法得到平均值。 你会发现整数除会截去小数,因此你必须使用浮点除以得到更精确的结果。 float()内建函数可以帮助你实现这一功能。

sum1=0
avg1=0
bint=0
#bTuple=input("please enter your list:")
bTuple=[1,2,3,4]
#print (blist[0])
for bint in range(len(bTuple)):
    sum1 = sum1+int((bTuple[bint]))
print(sum1)
avg1=sum1/len(bTuple)
print(bTuple)
print('输入的字符串平均数=%f' % avg1)

2–10.

带循环和条件判断的用户输入 使用raw_input()函数来提示用户输入一个1和100之间的 数,如果用户输入的数满足这个条件,显示成功并退出。否则显示一个错误信息然后再次提示 用户输入数值,直到满足条件为止。

userstr = input("please enter a number which between 0 and 100:")
while not 0 <= int(userstr) <= 100:
    print("please input a correct number!")
    userstr = input("please enter a number which between 0 and 100:")
else:
    print (userstr)

2–11.

带文本菜单的程序 写一个带文本菜单的程序,菜单项如下(1)取五个数的和 (2) 取五个 数的平均值 (X)退出。由用户做一个选择,然后执行相应的功能。当用户选择退出时程序 结束。这个程序的有用之处在于用户在功能之间切换不需要一遍一遍的重新启动你的脚本。(这 对开发人员测试自己的程序也会大有用处)

num='0'
isum=0
iavg=0
while True:
    print ('(1) 取五个数的和')
    print ('(2) 取五个数的平均值')
    print ('(X) 退出')
    num=input('please input your choose :')
    if num == '1':
        isum=sum((1,2,3,4,5))
        print (isum)
    elif num == '2':
        iavg=sum([1,2,3,4,5])/5
        print (iavg)
    elif num == 'X':
        break
    else:
        print('你的输入有误!')

2–12. dir()内建函数

(a) 启动 Python 交互式解释器, 通过直接键入 dir()回车以执行 dir()内建函数。你看到 什么? 显示你看到的每一个列表元素的值,记下实际值和你想像的值

dir([obj]) 显示对象的属性,如果没有提供参数, 则显示全局变量的名字

>>> dir()
['__builtins__', '__doc__', '__name__', '__package__', 'aDict', 'aList', 'aTupe', 'aTuple', 'inputName', 'iscool', 'pythr', 'sys']

(b) 你会问, dir()函数是干什么的?我们已经知道在 dir 后边加上一对括号可以执行 dir() 内建函数, 如果不加括号会如何? 试一试。 解释器返回给你什么信息? 你认为这个信息表 示什么意思 ?

>>> dir
<built-in function dir>

(c) type() 内建函数接收任意的 Python 对象做为参数并返回他们的类型。 在解释器中键 入 type(dir), 看看你得到的是什么?

type(obj) 将一个对象转换为字符串 返回对象的类型(返回值本身是一个 type 对象!)
>>> type(dir)
<type 'builtin_function_or_method'>

(d) 本练习的最后一部分, 我们来瞧一瞧 Python 的文档字符串。 通过 dir.__doc__ 可以访问 dir()内建函数的文档字符串(就是代码注释)。print dir.__doc__可以显示这个字符串的内容。 许多内建 函数,方法,模块及模块属性都有相应的文档字符串。我们希望你在你的代码中也要书写文档 字符串, 它会对使用这些代码的人提供及时方便的帮助。

>>> dir.__doc__
"dir([object]) -> list of strings\n\nIf called without an argument, return the names in the current scope.\n

2–13. 利用 dir() 找出 sys 模块中更多的东西。

(a) 启动Python交互解释器,执行dir()函数,然后键入 import sys 以导入 sys 模块。 再次执行 dir()函数以确认 sys 模块被正确的导入。 然后执行 dir(sys) , 你就可以看到 sys模块的所有属性了。

>>> dir(sys)
['__displayhook__', '__doc__', '__excepthook__', '__name__', '__package__', '__stderr__', '__stdin__', '__stdout__', '_clear_type_cache', '_current_frames', '_getframe', '_git', 'api_version', 'argv', 'builtin_module_names', 'byteorder', '


(b) 显示 sys 模块的版本号属性及平台变量。记住在属性名前一定要加 sys. ,这表示这个属性是 sys 模块的。其中 version 变量保存着你使用的 Python 解释器版本, platform 属性则包含你运行 Python 时使用的计算机平台信息。

>>> sys.version
'2.7.15 (default, Feb 12 2019, 11:00:12) \n[GCC 4.2.1 Compatible Apple LLVM 10.0.0 (clang-1000.11.45.5)]'
>>> sys.platform
'darwin'

(c) 最后, 调用 sys.exit() 函数。 这是一种热键之外的另一种退出 Python 解释器的方 式。

>>> sys.exit
<built-in function exit>

2–14. 重写 2.4 小节中 print 语句里的算术表达式, 试着在这个表达式中添加合适的括号以便它能正常工作。

2–15. 元素排序

(a)让用户输入三个数值并分别将它们保存到 3 个不同的变量中。不使用列表或排序算法, 自己写代码来对这三个数由小到大排序。

iNum=input('Pls enter three number:')
a=int(iNum[0])
b=int(iNum[1])
c=int(iNum[2])
while 3 == len(iNum):
    if (a==b or a==c or b==c):
        print('请输入3个不同的数字')
        iNum = input('Pls enter three number:')
        a = int(iNum[0])
        b = int(iNum[1])
        c = int(iNum[2])
    elif (a<b<c):
        print('输入的数由小到大依次为:%d<%d<%d ' % (a,b,c))
        break
    elif a<b and b>c and a<c:
        print('输入的数由小到大依次为:%d<%d<%d ' % (a, c, b))
        break
    elif a<b and b>c and a>c:
        print('输入的数由小到大依次为:%d<%d<%d ' % (c, a, b))
        break
    elif a>b>c:
        print('输入的数由小到大依次为:%d<%d<%d ' % (c, b, a))
        break
    elif a>b and b<c and a<c:
        print('输入的数由小到大依次为:%d<%d<%d ' % (b, a, c))
        break
    elif a>b and b<c and a>c:
        print('输入的数由小到大依次为:%d<%d<%d ' % (b, c, a))
        break
else:
        print('你的输入有误,请输入3个数字')

(b)修改(a)的解决方案,使之从大到小排序

 

2–16. 文件

键入 2.15 节的文件显示的代码, 然后运行它, 看看能否在你的系统上正常工作,然后试 一下其它的输入文件。

冒泡排序算法:有小到大排序

aList=[3,12,4,0,6,9,2]
for i in range(len(aList)):
    print('i=%d' % i)
    for j in range(len(aList)-i-1):
        print('j=%d' % j)
        print('单次排序-前-aList[j]、aList[j+1]:', (aList[j], aList[j + 1]))
        if (aList[j] > aList[j+1]):
            aList[j],aList[j+1]=aList[j+1],aList[j]
        print ('单次排序-后-aList[j]、aList[j+1]:', ( aList[j], aList[j+1]))
    print ('一轮排序后',(aList))
print (aList)

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值