Python入门教程(二)


  今天讲编程思惟。
python


  可能这对初次接触编程的人有用——我不是不想切入正题,我只是想强调根本没什么正题,我可能在其余文章里提过这一点。“编程语言就是语法糖”,可能你不知道什么是语法糖,可是知道的人也未必认同我。我不保证大家能听懂……python的教程有不少,可是我对不少都不满意,因此这算是个人尝试吧。程序员


  咱们将实现一个【筛选100之内素数】的程序。我不用python语言,而是用伪代码——伪代码没有固定写法,可是天然不是全部东西都叫伪代码。成为伪代码须要两个性质:编程

  1.  没有歧义。可能别人会以为有歧义,只要你以为没有就行。小程序

  2.  可执行。这意味着你必须输入一个动做,而不是“今每天气很好”等等。eclipse


  但可执行的不都是机器能够作的。通常地,你可让机器作:编程语言

  • 建立一个变量。变量就像空盒子,你能够往里放一个东西,但只能放一个。最多见的是装一个数,0,12345,-233333,等等。ide

  • 向变量里放东西。函数

  • 对数进行数学运算,并把结果放到某个变量
    spa

  • 打印字符串;打印一个数。(“打印”仅仅表示显示在屏幕上,这是通常说法)命令行

  • 条件选择。(之后再说)

  • 循环。(之后再说)


  绝大部分你以为比较“机械”的工做,机器均可以作。虽然说我不知道大家对机器有何感受……


  如今咱们试图实现一个筛选100之内素数的程序。你彻底能够按着本身的意愿写,好比:

若是1是素数,打印1
若是2是素数,打印2
若是3是素数,打印3
若是4是素数,打印4
若是5是素数,打印5
若是6是素数,打印6
若是7是素数,打印7
若是8是素数,打印8
若是9是素数,打印9
若是10是素数,打印10
若是11是素数,打印11
若是12是素数,打印12
若是13是素数,打印13
若是14是素数,打印14
若是15是素数,打印15
若是16是素数,打印16
若是17是素数,打印17
若是18是素数,打印18
若是19是素数,打印19
若是20是素数,打印20
若是21是素数,打印21
若是22是素数,打印22
若是23是素数,打印23
若是24是素数,打印24
若是25是素数,打印25
若是26是素数,打印26
若是27是素数,打印27
若是28是素数,打印28
若是29是素数,打印29
若是30是素数,打印30
若是31是素数,打印31
若是32是素数,打印32
若是33是素数,打印33
若是34是素数,打印34
若是35是素数,打印35
若是36是素数,打印36
若是37是素数,打印37
若是38是素数,打印38
若是39是素数,打印39
若是40是素数,打印40
若是41是素数,打印41
若是42是素数,打印42
若是43是素数,打印43
若是44是素数,打印44
若是45是素数,打印45
若是46是素数,打印46
若是47是素数,打印47
若是48是素数,打印48
若是49是素数,打印49
若是50是素数,打印50
若是51是素数,打印51
若是52是素数,打印52
若是53是素数,打印53
若是54是素数,打印54
若是55是素数,打印55
若是56是素数,打印56
若是57是素数,打印57
若是58是素数,打印58
若是59是素数,打印59
若是60是素数,打印60
若是61是素数,打印61
若是62是素数,打印62
若是63是素数,打印63
若是64是素数,打印64
若是65是素数,打印65
若是66是素数,打印66
若是67是素数,打印67
若是68是素数,打印68
若是69是素数,打印69
若是70是素数,打印70
若是71是素数,打印71
若是72是素数,打印72
若是73是素数,打印73
若是74是素数,打印74
若是75是素数,打印75
若是76是素数,打印76
若是77是素数,打印77
若是78是素数,打印78
若是79是素数,打印79
若是80是素数,打印80
若是81是素数,打印81
若是82是素数,打印82
若是83是素数,打印83
若是84是素数,打印84
若是85是素数,打印85
若是86是素数,打印86
若是87是素数,打印87
若是88是素数,打印88
若是89是素数,打印89
若是90是素数,打印90
若是91是素数,打印91
若是92是素数,打印92
若是93是素数,打印93
若是94是素数,打印94
若是95是素数,打印95
若是96是素数,打印96
若是97是素数,打印97
若是98是素数,打印98
若是99是素数,打印99
若是100是素数,打印100

  这【是】伪代码,由于既没有歧义,又能够执行。但机器无法执行,由于“是素数”咱们理解,机器并不能理解。可是咱们能够把“是素数”拆成几个分开的条件,使得机器能够理解较简单的条件。不过在此以前,咱们该先考虑一下,这100行是否是太多了?咱们能够用上一些小技巧:

新建一个变量A
把1放进A
若是A中的数是素数,打印A中的数
把A中的数增长1
回到第三行

  本来要100行的代码,如今只要5行了——这就是循环的一大用处,显然“回到第三行”致使了一个循环的造成。可是这个代码并不对,由于它会无限循环下去,根本不会结束,“能不断地打印素数”。因此要作一些修改:

新建一个变量A
把1放进A
若是A中的数是素数,打印A中的数
把A中的数增长1
若是A大于100,跳出循环
回到第三行

  由于这里只有一个循环,因此“跳出循环”是伪代码。python是强大的语言,理应能够把这些伪代码改为python语言,惋惜世界上有一个诡异的规定(绝大多数语言,C是例外):不准用“回到第三行”这种话。为了弥补,能够这样写:

新建一个变量A
把1放进A
把下面括号里的话重复100遍
(
若是A中的数是素数,打印A中的数
把A中的数增长1
)

  接下来咱们处理“是素数”。若是一个数大于3,而且除以全部大于一、比自身小1的数都有余数,那么它是素数。因此如下两段代码功能是同样的:

1:

若是A中的数是素数,打印A中的数

2:(通常地,咱们用直接用变量名称呼其中的东西,虽然说用盒子的名字称呼里面的东西很奇怪)

新建一个变量B
新建一个变量“这个数还有多是素数吗”
把2放进B
把字符串“有可能”放进变量“这个数还有多是素数吗”
把下面括号里的句子一直重复下去
(
若是A除以B没有余数,那么把字符串“不可能”放进变量“这个数还有多是素数吗”
把B加上1
若是此时B等于A,那么跳出循环
)
若是变量“这个数还有多是素数吗”中是“有可能”,打印A中的数

  加到一块儿,就是这样:(同时循环的只有一层,跳出循环仍然没有歧义)

新建一个变量A
把1放进A
把下面括号里的话重复100遍
(
新建一个变量B
新建一个变量“这个数还有多是素数吗”
把2放进B
把字符串“有可能”放进变量“这个数还有多是素数吗”
把下面括号里的句子一直重复下去
(
若是A除以B没有余数,那么把字符串“不可能”放进变量“这个数还有多是素数吗”
把B加上1
若是此时B等于A,那么跳出循环
)
若是变量“这个数还有多是素数吗”中是“有可能”,打印A中的数
把A中的数增长1
)

  如今咱们第一次正式使用python代码:(#号到行末是注释,不会当成语句运行,仅仅为了方便程序员阅读)

a = 1                                               #   新建变量A, 并把1放进A
for i in range(100):                                #   把下面括号里的话重复100遍
                                                    #(
    b = 2                                           #   新建变量B, 并把2放进B
    这个数还有多是素数吗 = "有可能"                     #   新建变量“这个数还有多是素数吗”, 并放入字符串“有可能”
    while True:                                     #   把下面括号里的句子一直重复下去
                                                    #(
        if a % b == 0:这个数还有多是素数吗 = "不可能"   #   若是A除以B没有余数,那么把字符串“不可能”放进变量“这个数还有多是素数吗”
        b += 1                                      #   把B加上1
        if a == b:  break                           #   若是此时B等于A,那么跳出循环
                                                    #)
    if 这个数还有多是素数吗 == "有可能":print(a)        #   若是变量“这个数还有多是素数吗”中是“有可能”,打印A中的数
    a += 1                                          #   把A中的数增长1
                                                    #)

  “把数放进变量”——即“赋值操做”,用的符号是等号。其实这并不符合直觉,而且用久了会产生错觉。代码中出现的双等号表示比较操做,等号只能用于赋值。

  这段代码中,for i in range(100) 意思是新建一个叫 i 的变量,而且使其为0。python中必须在建立时赋值,其实等于在第一次使用时建立。而后括号——python不用括号,而是在须要括号的时候缩进4格,括号结束的时候向前4格,这样就能对齐了——括号中的内容执行一遍,i 加上1,就这么继续下去。

  然而上面的代码并不工做。你会看到光标不停地闪——由于1并不能用上述方法检验是否为素数。可是从3开始就没问题了——大于一、且比自身小1的数得以存在,逻辑也得以运行了。因此咱们把第一行改为a=3 。

  然而结果中出现了101……因此咱们再改改……可是这些逻辑错误——而不是语法错误,是这门语言以外的东西了。咱们在写伪代码的时候就没有考虑周全,并非咱们没有学好这门语言。


  这个小程序很是原始,可是很关乎思惟。咱们至少能看到3个启示:(而且长久地有效)

  • 用循环取代重复的东西

  • 注意循环如何结束

  • 注意循环可否开始


  而编程思惟之外的东西,也就是传统书籍的绝大多数,我决定略过。可是学会了去提问,你就会发现,你确实只要学这么多就够了,授人以鱼不如授人以渔。接下来说解几个关键词。


函数

  请看代码:

def f(x):
	return 2*x

a = f(7)	
print(a)

  函数就是函数,能够简化数学操做。然而除了数学操做,函数也能够作其余操做,可是受一些限制。若是你要反复计算一个数的2倍(或者2倍+3+2的这个数倍+……这样的复杂函数),def是很好的选择。def应该是define(中文:定义)的缩写。你能够在函数里写print,引用函数以外的变量,以及 不能 修改函数以外的变量,等等。

  想了解更多,百度搜索“python3函数”,一个技巧是,看不懂就先挑看得懂的看。


字符串

  在python中,【半角,也就是英文下的】引号中的内容会被当成字符串。在英文中是没有前引号和后引号之分的,在从前日后读的时候,第一个会被当成前引号,第二个则与前一个匹配,被当作后引号。能够把字符串赋值给一个变量。若是一串英文不在引号里,那么它会被当作一个变量名称。中文引号起不到引号的做用。空格是一个字符,换行符也是一个字符(不妨print("hello\nworld")),可是换行符不能一会儿打出来,人们用“\”后跟一个字母表示这些不可见的符号,\n为换行,\\为\自身,\"为双引号(显然引号不能单独打出来)。牺牲一个符号,得到一堆额外的符号仍是值得的。python中,单双引号能够成对混用(匹配同种),但我习惯用单引号处理单个字符(单个字符也是字符串)。

  能放进变量里的东西——好比“字符串”,能够百度“python3字符串方法”(又好比“python3复数方法”,但字符串的方法尤为多)。“方法”就是加个点后跟一个函数,是函数的一种。说“方法”而不说“函数”的人,大可能是强调这种函数能够用一个“.”来调用之。至因而怎么回事,下一个教程再说(与“类”有关)


列表

l = [1,2,3,4,5]
print(l [0])
print(l [1])
print(l [2])
print(l [3])
print(l [4])

  五个print打印出12345 。a[ i ]表示a中第 i 个元素,可是起始的一个是“第0个元素”。就像有些楼的底层是“第0层”——这一习惯并不是没有优势。

  若是把第一行改为 l=1 ,到下一行会出错。由于整数没有“第n个元素”。

  l后括号前通常不用空格,这里是为了看得清楚

  (“python3列表方法”)


元组

t = (1,2,3,4,5)
print(t[0])
print(t[1])
print(t[2])
print(t[3])
print(t[4])

  元组和列表很类似。可是列表能够在被建立后再次赋值,好比能够a[2] = 100 。但试图用于元组时,会报错。元组不可改变——也并不是没有优势

  能够用a, b = (1,2) 一会儿赋多个值,仅元组能够。

字典

d = {"name" : "Jack", "age" : "7", "hobby" : "nothing"}
print(d["name"])
print(d["age"])
print(d["hobby"])

  你知道会打印出什么。"name" "age" "hobby"(注意有引号,是字符串)都是字典的“键”,"Jack" 7 "hobby"都是“值”,"Jack"是键"name"对应的值,"name" : "Jack"称为一个“键值对”。值能够说任何能放进变量的东西,键必须是不可修改的东西(好比整数,字符串,元组)


else

  百度“python3条件语句”


异常

  百度“python3条件语句”,“python3 assert”(断言)


文件操做

  代码:(自行理解)(r是read,用读取模式打开;w是write,用写入模式打开,将清除原有内容;还能够用a,用追加模式打开,将在最后继续写入。总之不能回改)

with open("演示.txt",'w') as tp:
	tp.write("六个演示文字\n")
	tp.write("十三个演示文字")
	tp.write("二十个演示文字")
	
	
with open("演示.txt",'r') as tp:
	print(tp.read())
	

print("="*20)
print("===============")

with open("演示.txt",'r') as tp:
	print(tp.readline())
	print(tp.readline())


键盘输入

  代码:(回车确认输入)

s = input("输入提示符> ")
print("刚才输入的是:",s)


模块(导入)

  from xxx import * ,至关于把同一文件夹下的xxx.py 文件内容所有粘贴在这里。

  import xxx,相似上一条,可是若是要使用那个文件中的变量a,要写成xxx.a ;用那个文件中的函数,写成xxx.f( )


布尔值

  True和False,和普通变量名看起来没什么大区别(首字母大写而已),可是为python保留字,即不可对其赋值。1 == 1的值为True,1!= 1为False(不等于的意思),1=='a' 的值为False,3 > 2的值为True,字符串和数字能够比较是否相等,比较大小会报错。若是强制对布尔值作加法,True被视为1,False为0 。

  可搜索“布尔代数”


标准库

  库是模块。多数放在环境变量下。

  例如 import os 后可使用os.system("echo hello"),你知道那是什么; import sys 后能够sys.stdout = open("xxxxxxxxxxxxxxxxxxxxxxx.txt",'w') ,而后接着随便print点东西看看后果

  搜索“python标准库”


IDE

  有些教程一开始就配置IDE,我认为命令行有必要先讲。所谓IDE就是一个豪华些的记事本,另外会给你一个按钮(可是每每不止一个按钮),点一下,就会给命令行发送消息,好比“python xxx.py”。我用的是Geany,感受还不错。反正我坚定反对新手用VS和eclipse,我到如今也刚刚能看懂罢了(毕竟不用)。网上搜索“geany python”有教程,可是最后一步我放个图(环境变量的用处来了)

搜狗截图18年01月22日1703_1.png

  只有执行一栏有用,由于python几乎不编译。并且好像只能一会儿粘贴,不能输入(我电脑的问题?),在记事本里打完整复制吧。


类、面向对象

  下次的内容。

相关文章
相关标签/搜索