数学差学python_笨方法学python练习与总结

这是一篇根据书本《笨方法学python3》而来的博客,希望自己能在每天抽一点时间来学习python,使自己能够前后端都能得到进步。脚踏实地,一步一步!

在开始之前,希望自己的英语能够在不断地积累与代码练习中的得到提高,以及告诫自己,无论什么事,取是能力,舍是境界。

第一个程序

练习代码:

print("Hello World!")

#print("Hello Again")

#print("I like typing this.")

#print("This is fun.")

#print("Yay! Printing.")

#print("i`d much rather you 'not' .")

#print('I "said" do not touch this.')

练习目的:使用python的打印方法,关于print这个方法其实有很深远的说法,待补充。

问题:由于作者希望读者能够摆脱ide的依赖,使用最原始的文本编辑器去进行python练习,所以在一开始无法运行自己编写的python程序。

解决:我们需要在我们自己写的python文件目录下执行 python3.x xxx.py才能将我们的程序运行起来。比如 lpthw/ex1.py 在编者的mac系统下就需要cd lpthw才可执行命令,运行python文件。

注释与#号

练习代码:

# A comment ,this is so you can read your program later.

# Anything after the # is ignored by python

print("I could have code like this.") # and the comment after is ignored

# You can also use a comment to "disable" or comment out code:

#print("This won't run")

print("This will run.")

练习目的:对于注释的使用,优秀的代码都是简洁明了的,通过合理的注释能够帮助使用者更好的理解项目。

问题:无

tip:一个小技巧,倒着阅读代码,这样可以避免你的大脑跟着每一段代码的意思走,这样可以让你精确处理每个片段,从而更容易发现代码中的错误。这是一个很好的差错技巧。

数学与数字运算

练习代码:

print("I will now count my chickens:")

print("Hens",25 + 30 / 6)

print("Roosters",100 - 25 * 3 / 4)

print("Now I will count the eggs:")

print(3.0 + 2.0 + 1.0 - 5.0 + 4.0 % 2.0 - 1.0 / 4.0 + 6.0)

print("Is it true that 3 + 2 < 5 — 7?")

print(3 + 2 < 5 - 7)

print("What is 3 + 2?",3 + 2)

print("What is 5 - 7",5 - 7)

print("Oh, that's why it's False." )

print("How about some more.")

print("Is it greater",5 > -2)

print("Is it greater or equal",5 >= -2)

print("Is it less or equal?", 5 <= -2)

练习目的:对于python中的运算符的使用,以及对于相关运算的值的理解。

问题:类似5 > 7 这类运算的结果是什么

解决:是布尔值,正确则为true,错误为false

tips:1.在运算中%是一个求余数的运算符

2.运算的优先级,PE(M&D)(A&S),括号Parentheses,指数Exponents,除Division,加Addition,减Subtraction

变量与命名

练习代码:

cars = 100

space_in_a_car = 4.0

drivers = 30

passengers = 90

cars_not_driven = cars - drivers

cars_driven = drivers

carpool_capacity = cars_driven * space_in_a_car

average_passengers_per_car = passengers / cars_driven

print("There are",cars,"cars available.")

print("There are only",drivers,"drivers avaliable.")

print("There will be",cars_not_driven,"empty cars today.")

print("We can transport",carpool_capacity,"people today.")

print("We have",passengers,"to carpool today.")

print("We have to put about",average_passengers_per_car,"in each car.")

执行结果:

练习目的:巩固打印,了解对于变量的命名是对程序很重要的一部分。

问题:无

tips:

1.在使用运算符号时,使符号左右空格,便于代码阅读。

2.=是赋值,==是我们日常的等于

3.学好英语对我们的编程有巨大的作用,目前来看,比如命名。

更多的变量与打印

练习代码:

my_name = 'Zed A. Shaw'

my_age = 35 # not a lie

my_height = 74 # inches

my_weight = 180 # lbs

my_eyes = 'blue'

my_teeth = 'White'

my_hair = 'Brown'

print(f"Let's talk about {my_name}.")

print(f"He's {my_height} inches tall.")

print(f"He's {my_weight} pounds heavy")

print("Actually that's not too heavy.")

print(f"He's got {my_eyes} eyes and {my_hair} hair.")

print(f"His teeth are usually {my_teeth} depending on the coffee.")

# this line is tricky, try to get it exactly right

total = my_age + my_height + my_weight

print(f"If I add {my_age},{my_height},and {my_weight} I got {total}.")

练习目的:对打印的理解加深,以及合理的变量名对程序很重要。

问题:无

tips:这里的打印可以以f....{}的形式进行插值。

习题6-字符传与文本

练习代码:

type_of_people = 10 # 定义人数

x = f"There are {type_of_people} types of people." #定义这里有10个人,并且是插值的方式

binary = "binary" # 定义binary变量

do_not = "don't"

y = f"Those who know {binary} and those who {do_not}."

print(x)

print(y)

print(f"I said :{x}")

print(f"I also said '{y}'")

hilarious = False

joke_evaluation = "Isn't that joke so funny ?! {}"

print(joke_evaluation.format(hilarious))

w = "This is the left side of ..."

e = "a string with a right side."

print(w + e)

练习目的:继续使用打印,以及forma的插值使用。

问题:无

tips:对于代码的调试,重中之重就是不断的print  print  print

习题7-更多打印

练习代码:

print("Mary had a little lamb.")

print("Its fleece was white as {}.".format('snow'))

print("And everywhere that Mary went.")

print("." * 10) # what'd that do ?

end1 = "C"

end2 = "h"

end3 = "e"

end4 = "e"

end5 = "s"

end6 = "e"

end7 = "B"

end8 = "u"

end9 = "r"

end10 = "g"

end11 = "e"

end12 = "r"

# watch that comma at the end. try removing it to see what happens

print(end1+end2+end3+end4+end5+end6,end=' ') #打印cheese 并且加空格end=' ' 赋值并且打印

print(end7+end8+end9+end10+end11+end12)

练习目的:继续理解打印的规则

问题:无

tips:打印的时候可以赋值再打印,就像倒数第二行代码显示的一样。

习题8-打印,打印

练习代码:

formatter = "{} {} {} {}"

print(formatter.format(1,2,3,4))

print(formatter.format("one","two","three","four"))

print(formatter.format(True,False,True,False))

print(formatter.format(formatter,formatter,formatter,formatter))

print(formatter.format(

"Try your",

"Own text here",

"Maybe a poem",

"Or a song about fear"

))

练习目的:学习format的使用

问题:无

tips:这里使用了函数,其实不只是我们自己定义的是函数,function()就是函数,带括号就是一种调用的方式。

习题9-打印,打印,打印

练习代码:

# Here's some new strange stuff ,remember type it exactly.

days = "Mon Tue Wed Thu Fri Sat Sun"

months = "Jan\nFeb\nMar\nApr\nMay\nJun\nJul\nAug"

print("Here are the days:",days)

print("Here are the months:",months)

print("""

There's something going on here.

With the three double-quotes.

We'll be able to type as much as we like.

Even 4 lines if we want, or 5, or 6.

""")

练习目的:继续体会打印的用处,初步了解转义符号以及多行打印的用处。

问题:无

tips:人世事艰难,你能熬过多少至暗时刻,就能走多远。

习题10-那是什么

练习代码:

tabby_cat = "\tI'm tabbed in."

persian_cat = "I'm split\non a line."

backslash_cat = "I'm \\ a \\ cat"

fat_cat = """

I'll do a list:

\t* Cat food

\t* Fishies

\t* Catnip\n\t* Grass

"""

print(tabby_cat)

print(persian_cat)

print(backslash_cat)

print(fat_cat)

练习目的:对于转义字符的学习

问题:无

tips:这里分享部分转义序列(硬核分享),转义字符的斜杠是\,不要记反了哦

习题11-提问

练习代码:

print("How old are you?",end=' ')

age = input()

print("How tall are you?",end=' ')

height = input()

print("How much do you weight?",end='')

weight = input()

print(f"So, you're {age} old, {height} tall and {weight} heavy")

练习目的:input的使用,用于用户输入,并赋值的过程

问题:无

tips:暂无。类似高级用法x = int(input())

习题15-读取文件

练习代码:注释如图

from sys import argv #从sys的包中导入argv模块

script, filename= argv #为运行命令行时需要输入文件名

txt= open(filename) #相当于是文件句柄with open() as f的f

print(f"Here's your file {filename}:") #打印文件名字

print(txt.read()) #打印文件内容

print("Type the filename again:") #文件提示

file_again= input(">") #再次打开文件

txt_again= open(file_again) #同第六行代码

print(txt_again.read()) #继续打印

需要注意的点:

问:为什么打开两次文件不会报错?

答:因为在Python中不会限制让你打开一次文件,允许多次打印。但是关闭文件也是必须的。

16-读写文件

练习代码:

from sys importargv

script, filename=argvprint(f"We're going to erase {filename}.")print("If you don't want that, hit CTRL-C (^C).")print("If you do want that, hit RETURN.")

input("?")print("Opening the file...")

target= open(filename, 'w')print("Truncating the file. Goodbye!")

target.truncate()print("Now I'm going to ask you for three lines.")

line1= input("line 1:")

line2= input("line 2:")

line3= input("line 3:")print("I'm going to write these to the file.")

target.write(line1)

target.write("\n")

target.write(line2)

target.write("\n")

target.write(line3)

target.write("\n")print("And finally, we close it.")

target.close()

需要注意的知识点:

1.close:关闭文件。与编辑器中的“文件” -> “保存” 是一个意思。

2.read: 读取文件的内容。可以将结果赋给一个变量。

3.readline: 只读取文本文件中的一行。

4.truncate:清空文件,小心使用该命令。

5.write('stuff'): 将"stuff"写入文件

6.seek(0): 将读写位置移动到开头

tips:

open的默认打开模式为r,是只读模式

习题17-更多文件操作

from sys importargvfrom os.path importexists

script, from_file, to_file=argvprint(f"Copying from {from_file} to {to_file}")

in_file=open(from_file).read()print(f"The input file is {len(in_file)} bytes long")print(f"Does the output file exist?{exists(to_file)}")print("Ready, hit RETURN to continue, CTRL-C to abort.")

input()

out_file= open(to_file, 'w')

out_file.write(in_file)print("Alright, all done.")

out_file.close()#in_file.close()

知识点:

1.exists  以文件名作为参数,文件存在返回true,不存在返回false

2.书本上存在部分linux指令,后期需要学习

3.read()一旦执行,会将文件关闭,所以不用自己去关闭文件。

4.打开文件之后为什么要关闭?减少资源消耗、关闭才会同步到磁盘。

19-命名、变量、代码和函数

'''函数的功能

1.他们给代码段命名,就像变量给字符串和数值命名一样

2.它们可以接收参数,和脚本argv接收参数一样'''

#this one is like your scripts with argv

def print_two(*args):

agr1, agr2=argsprint(f"arg1: {agr1}, arg2: {agr2}")#ok, that *args is actually pointless, we can just do this

defprint_two_again(arg1,arg2):print(f"arg1: {arg1}, arg2: {arg2}")#this just take one argument

defprint_one(arg1):print(f"arg1:{arg1}")#this one take no argument

defprint_none():print("I got nothin'.")

print_two("Zed","Shaw")

print_two_again("Zed","Shaw")

print_one("First!")

print_none()

知识点:

1.函数命名的规则

与变量名相同,只要以字母、下划线以及数字组成的,而不是以关键字开头的即可(也不能是常用的关键字)

2.*args中的*是什么意思

告诉python接收所有参数,放到args的列表当中去,在函数中取出来,解包,继续使用。

19-函数与变量

话不多说,代码先行:

defcheese_and_crackers(cheese_count, boxes_of_crackers):print(f"You have {cheese_count} cheeses!")print(f"You have {boxes_of_crackers} boxes of crackers!")print("Man that's enough for a party!")print("Get a blanket. \n")print("We can just give the function numbers directly:")

cheese_and_crackers(20, 30)print("OR, we can use variables from our script:")

amount_of_cheese= 10amount_of_crackers= 50cheese_and_crackers(amount_of_cheese,amount_of_crackers)print("We can even do math inside too:")

cheese_and_crackers(10 + 20, 5 + 6)print("And we can combine the two, variables and math:")

cheese_and_crackers(amount_of_cheese+ 100, amount_of_crackers + 1000) #调用该方法,通过变量加数字的形式

本节主要是学习函数的不同的使用方式,分别为常量调用、变量调用、两者相加的调用、含有计算的调用。

需要注意的是:函数的中的参数,当实际参数传入函数之后,函数会为这些变量创建一些临时的版本,等函数结束之后销毁。

20-函数与文件

from sys import argv #从sys库里面导入argv包

script, input_file=argvdefprint_all(f):print(f.read())defrewind(f):

f.seek(0)defprint_a_line(line_count, f):print(line_count,f.readline())

current_file=open(input_file)print("First let's print the whole file:\n")

print_all(current_file)#调用函数,打印文件所有内容

print("Now let's rewind, kind of like a tape.")

rewind(current_file)#将光标重置在文件的第一行

print("Let's print three lines:")

current_line= 1print_a_line(current_line,current_file)

current_line= current_line + 1print_a_line(current_line, current_file)

current_line= current_line + 1 #函数页数加一

print_a_line(current_line, current_file) #调用print_a_line函数

知识点:

1.文件句柄可以理解为针头,读取文件的使用类似固体磁盘去读取

2.readline()是扫描文件里面的\n来找到每一行的终止的。

21-函数可以返回某些东西

defadd(a, b):print(f"ADDING {a} + {b}")return a +bdefsubtract(a, b):print(f"SUBTRACTING {a} - {b}")return a -bdefmultiply(a, b):print(f"MULTIPLYING {a} * {b}")return a *bdefdivide(a, b):print(f"DIVIDING {a} / {b}")return a /bprint("Let's do some math with just functions!")

age= add(30, 5)

height= subtract(78, 4)

weight= multiply(90, 2)

iq= divide(100, 2)print(f"Age: {age}, Height: {height}, Weight: {weight}, IQ: {iq}")#A puzzle for the extra credit, type it in anyway.

print("Here is a puzzle.")

what= add(age,subtract(height,multiply(weight,divide(iq,2))))print("That becomes:",what,"Can you do it by hand?")

函数中可以通过return,将我们在函数中处理的结果返回出来,比如一个加法的函数,我们的结果可以使用x = add()的方式获取,从而进行其他的操作。

25-通过终端导入脚本进行测试

defbreak_words(stuff):"""This function will break up words for us."""words= stuff.split(' ')returnwordsdefsort_words(words):"""Sorts the words."""

returnsorted(words)defprint_first_word(words):"""Prints the first word after popping it off."""word=words.pop(0)print(word)defprint_last_word(words):"""Prints the last word after popping it off"""word= words.pop(-1)print(word)defsort_sentence(sentence):"""Take in a full sentence and returns the sorted words."""words=break_words(sentence)returnsort_words(words)defprint_first_and_last(sentence):"""Prints the first and last words of the sentence."""words=break_words(sentence)

print_first_word(words)

print_last_word(words)defprint_first_and_last_sorted(sentence):"""Sorts the words then prints the first and last one."""words=sort_sentence(sentence)

print_first_word(words)

print_last_word(words)

终端操作如下:

>>> importex25>>> sentence = "All good things come to those who wait"

>>> words =ex25.break_words(sentence)>>>words

['All', 'good', 'things', 'come', 'to', 'those', 'who', 'wait']>>> sorted_words =ex25.sort_words(words)>>>sorted_words

['All', 'come', 'good', 'things', 'those', 'to', 'wait', 'who']>>>ex25.print_first_word(words)

All>>>ex25.print_last_word(words)

wait>>>words

['good', 'things', 'come', 'to', 'those', 'who']>>>ex25.print_first_word(sorted_words)

All>>>ex25.print_last_word(sorted_words)

who>>>sorted_words

['come', 'good', 'things', 'those', 'to', 'wait']>>>ex25.print_first_and_last(sentence)

All

wait>>>ex25.print_first_and_last_sorted(sentence)

All

who>>>

要点:通过终端能够快速的测试我们的代码,而且不用创建新的文件,某种程度来说较为便利。

30-if

if为代码创建了分支,符合条件的执行,不符合条件的跳过

多个elif为true时,只执行第一个为true的代码块

if语句的规则

每一条if语句必须包含一个else.

如果这个else永远不应该被执行到,因为它本身没有任何意义,那你必须在else语句后面使用一个叫die函数,让它打印出出错消息并且"死"给你看。

if 语句嵌套不要超过两层,最好尽量保持只有一层。

将if 语句当做段落来对待,其中的每一个if、else好和elif组合就和每一个段落的句子组合一样。这种组合最前面和最后面以一个空行区分。

布尔测试最好用计算好的运算结果进行判断。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值