第一章 Game over 代替 hello world
1.1 python语言的特点:
。易于使用
。功能强大
。面向对象
。免费且开源
。胶水语言,可以和c等良好配合
1.2 Game over 代替 hello world
1.2.1 经典的print语句
1 print ("Game over") 2 3 input ("press enter key to exit") 注意:python语言是区分大小写的,因此print写成Print或PRINT,python语言是报错的。同理,变量abd和ABC对python来说是两个不同的变量。 input()语句提供了用户交互的功能。
1.2.2 使用注释:注释是让程序清晰易读的重要方法。"#"开头的是单行注释,用"""三个双引号或单引号包括的是多行注释.
1 # GAME OVER 2 #演示print()的用法 3 print ("Game over") 4 5 input ("press enter key to exit")
第二章 类型、变量简单的交互
2.1使用引号和字符串
2.1.1 三重引号和双重引号一样,引号中包括起来的内容将解释为字符串类型。引号的使用不区分引号或双引号。但是双重引号所包括的内容是不能跨越多行的。在这种情况下,要使用三重引号来定义需要的内容。
1 #game_over - version 2 2 #演示引号在字符串中的用法 #在引号中使用引号,只有字符串中的引号显示.最外的引号仅起到括定字符串的作用. 3 print ("Program 'Game Over' 2.0") 4 5 print ("same","message","as before") # 一次性传递给print()多个值,各个值间用,分开,可以一次性打印出来.print()默认各值之间用空格分隔 6 7 print ("Just", 8 "a bit", 9 "bigger") 10 11 print ("here",end=" ")# end= " ",指定print的行结束符是用空格,这个语句执行完后,不换行,打印一个空格.默认的行结束符是换行符.也可以指定其他的字符. 12 print ("it is ...") 13 14 print (""" 15 16 ________ ________ _____ ______ _______ 17 |\ ____\|\ __ \|\ _ \ _ \|\ ___ \ 18 \ \ \___|\ \ \|\ \ \ \\\__\ \ \ \ __/| 19 \ \ \ __\ \ __ \ \ \\|__| \ \ \ \_|/__ 20 \ \ \|\ \ \ \ \ \ \ \ \ \ \ \ \_|\ \ 21 \ \_______\ \__\ \__\ \__\ \ \__\ \_______\ 22 \|_______|\|__|\|__|\|__| \|__|\|_______| 23 24 25 26 ________ ___ ___ _______ ________ 27 |\ __ \|\ \ / /|\ ___ \ |\ __ \ 28 \ \ \|\ \ \ \ / / | \ __/|\ \ \|\ \ 29 \ \ \\\ \ \ \/ / / \ \ \_|/_\ \ _ _\ 30 \ \ \\\ \ \ / / \ \ \_|\ \ \ \\ \| 31 \ \_______\ \__/ / \ \_______\ \__\\ _\ 32 \|_______|\|__|/ \|_______|\|__|\|__| 33 34 38 """) 39 40 input ("\n\npress enter key to exit")
运行结果如下
2.2 转义字符
转义序列(escape sequence)是可以在字符串中使用的特殊字符,由一个"\"和紧跟其后的一个字符组成.它使客户能够更灵活的控制文本显示。
序列 | 说明 |
\\ | 打印一个反斜杠 |
\' | 打印一个单引号(即使已用做字符串括号) |
\" | 打印一个双引号(即使已用做字符串括号) |
\a | 让电脑蜂鸣器鸣一声 |
\t | 打印一个制表符 |
\n | 执行一个换行操作 |
1 #演示转义序列 2 print ("\t\t\tFancy Credits") 3 4 print ("\t\t\t \\ \\ \\ \\ \\ \\ \\ \\ ") 5 print ("\t\t\t by") 6 print ("\t\t\tMichael Dawson") 7 print ("\t\t\t \\ \\ \\ \\ \\ \\ \\ \\ ") 8 print ("\nSpecial thanks goes out to:") 9 print ("My hair stylist,Henry \'The Great,\'who never says \"can\'t.\"") 10 11 print ("\a") #响一下电脑蜂鸣器 12 13 input ("\n\n 请按下回车键结束")
2.2 字符串的连接和重复
2.2.1 字符串的连接,指的是将多个字符串拼接成一个新的字符串,使用‘+’运算符。两个字符串拼接后,之间不会有空格或别的分隔符。如“loong”+“cool”的结果是“loongcool”
2.2.2 使用行继续符"\",如果一行语句很长,可以在一行未尾加\然后换行来分隔语句。对于计算机来说,仍然是一条语句,但是对人来说是提升了程序的易读性。
2.2.3 重复输出字符串,使用"*"运算符。如 print ("pie"*5) 输出结果是 peipeipeipeipei
2.3 使用数字
python为程序员提供了多种数字类型。最常见的是整数和浮点数。整数:指没有小数部分的数字,如1,27,-101,0等。浮点数就是带有小数部分的数字如2.34,7.88,-345,2等。
2.3.1数学运算符
//整数除法:除法的结果永远是整数,小数部分自动忽略。
%取余除法:求模运算,用于求取整数除法表达式的余数。
1 print ("python 语言中数字运算符的应用") 2 print ("2000-100+200=",2000-100+200) 3 print ("真除法 10/3=",10/3) 4 print ("取整除法 10//3=",10//3) 5 print ("取余除法 10%3=",10%3)
执行结果 :
Python 3.8.10 (/usr/bin/python3) >>> %cd '/home/loong/文档/thonny_pyprogram/game-py/chat2' >>> %Run creeter.py python 语言中数字运算符的应用 2000-100+200= 2100 真除法 10/3= 3.3333333333333335 取整除法 10//3= 3 取余除法 10%3= 1
常见数学运算符
运算符 | 说明 | 范例 | 求值结果 |
+ | 加 | 7+3 | 10 |
- | 减 | 7-3 | 4 |
× | 乘 | 7×3 | 21 |
/ | 除(真除法) | 7/3 | 2.333333 |
// | 取整除法 | 7//3 | 2 |
% | 求模(取余) | 7%3 | 1 |
2.4 变量
程序员可以利用变量对信息进行存储和操作,变量提供了一种标记和访问信息的手段,使得编程人员无须记忆某个信息在计算机内存中的位置。值得注意的是信息并不是存储在变量内,信息是存储在某个内存地址中,然后程序员创建的变量会指向该内存地址,从而通过变量名来引用该地址的值。既变量对值只是引用(而不是存储)
2.4.1 创建变量
name = “lily" 叫做赋值语句,它创建了一个name的变量。并给它赋了一个值。这样name就指向了"lily"这个字符串。如果变量不存在,python就会先创建一个变量,然后再进行赋值操作。从下面的语句中可以清楚的看出来。id()语句可以读出变量值所在内存中的地址。对变量“name”和“na”赋了同一个值字符串loong。可以看出,系统中值的地址是一个,而不是创建了两个,各自存在变量名中。说明了系统中,变量对值只是引用而不是存储。
>>> name = "loong" >>> id (name) 140610209958000 >>> type (name) <class 'str'> >>> na = "loong" >>> id (na) 140610209958000 >>>
2.4.2 变量命名
2.5 获取输入
有了变量,可以对程序做更灵活的和交互性更好的设计,实现更多的功能 。
2.5.1 Personal Greeter 程序,演示获取用户输入
程序中会要求用户输入一个信息,并使用一个变量来调用用户输入的信息来显示一个欢迎信息。而非是程序中固定的信息。这样不同的用户都可以看到系统对自己的欢迎信息。
1 #2.7 获取用户输入 2 #让用户输入自己的名字,并在计算机上显示 3 name = input ("你好,请问你叫什么\n") 4 5 print ("\n你的名字真好听,",name) 6 print("bye!",name) 7 input ("退出请按回车键")
执行结果如下
你好,请问你叫什么 andi 你的名字真好听, andi bye! andi 退出请按回车键
2.5.2使用input()函数
name = input ("你好,请问你叫什么\n")
程序通过这个赋值语句来获取用户的输入。左侧的name是创建了一个变量,对变量name的赋值是通过右侧的input()函数调用来获得。
input()函数用于从用户处获取一些文本。input()函数,括号中的参数就是对用户的提示信息。在本程序中是“你好,请问你叫什么”。然后
input()会等待用户的输入,当用户按下enter键后,用户输入的信息会以字符串的形式返回系统,然后执行赋值语句,将值赋给变量name
注意:input()函数获得的任何数据都会处理成字符串格式,既使是用户输入的一个数字,也是做为字符串类型输入系统。因此当我们需
要获取用户输入的数字进行数值运算时,要对数据类型进行转换。
2.6 学习使用字符串
功能的实现是以字符串变量调用字符串处理方法来实现的。如下所示的 quote.upper() ,这里必须要跟上变量名。只写成upper()是无 意义的。这被叫做方法调用。其格式如下:
变量名.方法名(参数) (参数是可选的)如upper()就没有参数,replace(原字符,替换字符,次数)就是有可选的参数。
#转换字符串练习 #quotation manipulation quote = ("I think there is a world market for maybe five computers.") print ("original quote:\n",quote) print ("\nIn uppercase:") print (quote.upper()) print ("\nIn lowercass:") print (quote.lower()) print ("\nas a title:") print (quote.title()) print ("\nwith a minor Replacement:") print (quote.replace("five","millions of")) print ("original quote is still:\n") print (quote) input ("press enter key to exit")
original quote: I think there is a world market for maybe five computers. In uppercase: I THINK THERE IS A WORLD MARKET FOR MAYBE FIVE COMPUTERS. In lowercass: i think there is a world market for maybe five computers. as a title: I Think There Is A World Market For Maybe Five Computers. with a minor Replacement: I think there is a world market for maybe millions of computers. original quote is still: I think there is a world market for maybe five computers. press enter key to exit
常用字符串的方法
2.7 转换值的类型
前面说过对于input()函数获取的值,python默认是做为一个字符串类型记录的。当我们想要将用户的输入做为数字类型来处理时,就要进行值的转换。
1 car = input ("how money for your car:") 2 car = int (car) 3 type (car) 4 5 #等于car = int (input("how money for your carL"))
在python中执行的结果
Python 3.8.10 (/usr/bin/python3) >>> car = input ("how money for your car:") how money for your car:3500 >>> type (car) <class 'str'> >>> car = int(car) >>> type(car) <class 'int'>
从中可以看出,初始输入的car的信息3500,是做为字符串类型“str”存入计算机的。用int()转换后,成为int整型数。这样就可以进行的正常的数学运算了。
2.8 复合运算符
在编程时经常会对变量的原始值做一些运算后得到的值再重新赋值回去。这样就产生了复合运算符的写法。
第三章 条件分支、while循环及程序策划
程序不可能只是处理一种情况的顺序模式,为了解决实际的问题,必须让程序可以按照不同的条件来执行不同的语句,有时也要让程序自动的重复执行一个功能。计算机最大的特点和长处就是可以不知疲倦的年重复执行一个运算,而且速度极快。
3.1 引入库和生成随机数
3.1.1 引入random模块
python中默认提供了许多的模块(module),含有可供程序使用的各种代码文件,以用简单的方案实现不同的功能。但是,这些模块并不是每次编写程序都要必须用到的。没有必要每次都加载到内存中,并且也不经济。因此,就要具体编程时,根据程序功能的需要,实时的加载所需的模块。这就是python中的引入模块的操作。这里程序要引用的是random模块,是有关生成随机数和随机结果的各种函数。
引入模块的语句的写法是 import 模块名
这次要引入的是random模块,写做 import random
3.1.2使用randint()和randrange()函数
randint()和randrange()都是random模块下的两个函数。
randint()的作用是产生随机整数,randrange()的作用是产生指定范围内的一系列随机数。
3.1.2.1randint()的调用
import random die1 = random.randint(1,6)
因为randint()函数是属于random模块,因此对于randint()函数的使用要通过random模块来调用。写成 random.randint(1,6) 的形式。这称为点标记法(dot notation)。表示random模块的randint()函数。这里有两个参数1,6,表示将返回整数1到6之间的随机整数。
3.1.2.2randrange()
import random die2 = random.randrange(6)
给randrange()一个正整数参数,函数会返回一个0(包括)到参数值(不包括)之间的随机参数。上面的程序中会返回一个0,1,2,3,4,5之间的数。既参数6表示,从0开始算起的6个数。这样,die2的数字就没有上个die1产生的1和6了,可以写成die2 = random.randrange(6)+1的形式,让其随机数加1来解决.
3.2条件分支语句之if语句,语句的分块缩进创建代码块
if语句格式
if 条件表达式(或布尔值):
执行语句块(注意:此处要有缩进,表明是上条if语句的一部分;2上面语句条件判断为真时或布尔值为真时,执行,否则就跳过)
elif 条件表达式(或布尔值): (如果if语句后条件不成立时,检查此条件成立否.可以有0到多个,可以满足多个分支的要求)
执行语句(elif部分条件为真时执行,为假就跳过.)
else : (可选语句)
执行语句(if和elif条件都不成立时执行语句)
if语句中,不论有多少个子语句(elif语句存在),总是从代码块首开始判断条件是是否成立,不成立则继续下条语句判断,成立则立刻执行对应的语句并立刻结束if语句体,不考虑其后是否还有成立的条件。
编程实例
1 #演示随机数模块和if语句 2 #随机显示心情指数 3 4 import random 5 happy_num= random.randint(1,3) 6 print ("让我们看看你现在的心情\n") 7 if happy_num == 1: 8 print ("oh,nice.\(^o^)/ \n") 9 elif happy_num == 2: 10 print ("oh,no!⊙︿⊙\n") 11 else: 12 print ("oh,你入定了. ^*(- -)*^\n") 13 14 input ("\n好了,就到这里吧.再会!")
3.3 创建一个while循环
while在英语中有当...的时侯的意思.while循环,就是当指定条件成立时,就循环(执行一段语句),直到给定条件不满足时退出.
3.3.1 设定哨兵变量
3.3.2 避免无限循环
3.3.3 把值解释为布尔值
3.3.4 无限循环和break和continue的作用
3.3.5 与或非逻辑运算
3.4规划程序的步骤
3.5挑战:
3.5.1 用程序规划的方法写一个模似抽签的程序,每次随机显示出五条灵符中的一个灵符的内容
1 ''' 2 程序规划 3 生成签号对应的5条信息 4 引入random模块 5 欢迎用户 6 执行一个循环 7 while ture: 8 询问用户是否要抽签,输入yorn 9 if 要y 10 生成一个1~5的随机数给签号 11 判断是几号签 12 打印签号对应的内容 13 countiu 14 elif 否: 15 break 16 else: 17 提示输入错误,重新循环 18 感谢用户参与 19 提示按回车键退出 20 ''' 21 #签号对应内容 22 tarot1 = "你现在的情况还是蛮不错的,在你看来只要坚持下去就是希望满满的节奏" 23 tarot2 = "别想到啥就做啥。还有如果你想学好,至少短期内勤奋点,少偷懒玩了。" 24 tarot3 = "在学习上更建议你还是专一点认真点化心思和时间下去,别总是走神到无关紧要的事情上" 25 tarot4 = "这份工作就是与你对冲,即使再好的机会到你手里也会变坑" 26 tarot5 = "如果你选择走这条路,选择这个工作,未来里至少两三个月的时间里你会是非常累并且要做非常多的付出" 27 #引入随机数模块 28 import random 29 tarot = 0 30 #程序开始 31 print ("欢迎您来到塔罗星座屋") 32 while True: 33 choos = input ("\n现在要开始抽牌么?Y开始,N结束\n") 34 if choos == "y" or choos=="Y": 35 tarot = random.randint(1,5) 36 if tarot ==1: 37 print (tarot1) 38 elif tarot ==2: 39 print (tarot2) 40 elif tarot == 3: 41 print (tarot3) 42 elif tarot ==4: 43 print (tarot4) 44 elif tarot ==5: 45 print (tarot5) 46 elif choos == "n" or choos=="N": 47 break 48 else: 49 print ("输入错误,请输入\"Y\"或\"N\"\n") 50 continue 51 print ("感谢您来到星座塔罗小屋,再会\n") 52 input ("按回车键退出")
试一下,要是把(if choos == "y" or choos=="Y")这条语句写成(if choos == "y" or "Y"),程序能运行么.这个也能运行,但是会进入一个死循环.因为这个表达式中,会计算choos=="y"得到一个真或假的布尔值,这个布尔值接着会or "Y",这就成了一个布尔型数值和一个字符型数据进行or运算,结果就是这个字符本身.在python中除了空值和零值外,其他的值都归于布尔值的真值,所以循环的结果总是成立,变成了一个死循环.不论用户输入什么.