一、作业内容
笨办法学 Python 习题27-34以及加分题。
二、作业代码:
# 习题 27: 记住逻辑关系
# 一、记住逻辑术语
and # 与
or # 或
not # 非
!= # (not equal) 不等于
== # (equal) 等于
>= # (greater-than-equal) 大于等于
<= # (less-than-equal) 小于等于
True # 真
False # 假
# 二、真值表
# 书中的方法是通过索引卡片记忆和默写表达式,来判断`True` or `False`。
死记硬背很麻烦啊……然后我去找其他的教程。
廖雪峰的 Python3 教程中:
布尔值可以用
and
、or
和not
运算。
and
运算是与运算,只有所有都为True
,and
运算结果才是True
:
>>> True and True
True
>>> True and False
False
>>> False and False
False
>>> 5 > 3 and 3 > 1
True
or
运算是或运算,只要其中有一个为True
,or
运算结果就是True
:
>>> True or True
True
>>> True or False
True
>>> False or False
False
>>> 5 > 3 or 1 > 3
True
这样很容易就可以记住了。
# 习题 28: 布尔表达式练习
>>> True and True
True
>>> False and True
False
>>> 1 == 1 and 2 == 1
False
>>> "test" == "test"
True
>>> 1 == 1 or 2 != 1
True
>>> True and 1 == 1
True
>>> False and 0 != 0
False
>>> True or 1 == 1
True
>>> "test" == "testing"
False
>>> 1 != 0 and 2 == 1
False
>>> "test" != "testing"
True
>>> "test" == 1
False
>>> not (True and False)
True
>>> not (1 == 1 and 0 != 1)
False
>>> not (10 == 1 or 1000 == 1000)
False
>>> not (1 != 10 or 3 == 4)
False
>>> not ("testing" == "testing" and "Zed" == "Cool Guy")
True
>>> 1 == 1 and not ("testing" == 1 or 1 == 0)
True
>>> "chunky" == "bacon" and not (3 == 4 or 3 == 3)
False
>>> 3 == 3 and not ("testing" == "testing" or "Python" == "Fun")
False
# 加分习题
# 一、Python 里还有很多和 != 、 == 类似的操作符. 试着尽可能多地列出 Python 中的等价运算符。例如 < 或者 <= 就是。
# 二、写出每一个等价运算符的名称。例如 != 叫 “not equal(不等于)”。
# != 叫 not equal(不等于)
# == 叫 equal(等于)
# < 叫 less than(小于)
# <= 叫 less than or equal(小于或等于)
# 三、在 python 中测试新的布尔操作。在敲回车前你需要喊出它的结果。不要思考,凭自己的第一感就可以了。把表达式和结果用笔写下来再敲回车,最后看自己做对多少,做错多少。
# 四、把习题 3 那张纸丢掉,以后你不再需要查询它了。
# 习题 29: 如果(if)
people = 20
cats = 30
dogs = 15
if people < cats:
print("Too many cats! The world is doomed!")
if people > cats:
print("Not many cats! The world is saved!")
if people < dogs:
print("The world is drooled on!")
if people > dogs:
print("The world is dry!")
dogs += 5
if people >= dogs:
print("People are greater than or equal to dogs.")
if people <= dogs:
print("People are less than or equal to dogs")
if people == dogs:
print("People are dogs.")
运算结果如下:
Too many cats! The world is doomed!
The world is dry!
People are greater than or equal to dogs.
People are less than or equal to dogs
People are dogs.
Process finished with exit code 0
# 加分习题
# 猜猜“if语句”是什么,它有什么用处。
# 在做下一道习题前,试着用自己的话回答下面的问题:
# 一、你认为 if 对于它下一行的代码做了什么?
# 答:if根据条件判断要不要执行下一行的代码。
# 二、为什么 if 语句的下一行需要 4 个空格的缩进?
# 答:规则。便于查看?
# 三、如果不缩进,会发生什么事情?
# 答:会报错。
IndentationError: expected an indented block
# 四、把习题 27 中的其它布尔表达式放到``if语句``中会不会也可以运行呢?试一下。
people = 20
cats = 30
dogs = 15
if people != cats:
print("Too many cats! The world is doomed!")
if people == cats:
print("Not many cats! The world is saved!")
if people >= dogs:
print("The world is drooled on!")
if people > dogs:
print("The world is dry!")
# 答:可以运行。
五、如果把变量 people, cats, 和 dogs 的初始值改掉,会发生什么事情?
执行的结果会发生变化。
# 习题 30: Else 和 If
people = 40
cars = 39
buses = 15
if cars > people:
print("We should take the cars.")
else:
print("We can''t decide.")
if buses > cars:
print("That's too many buses.")
elif buses < cars:
print("Maybe we could take the buses.")
else:
print("We still can't decide.")
if people > buses:
print("Alright, let's juse take the buses.")
else:
print("Fine, let's stay home then.")
# 加分习题
# 一、猜想一下 elif 和 else 的功能。
# elif
# 二、将 cars, people, 和 buses 的数量改掉,然后追溯每一个 if 语句。看看最后会打印出什么来。
# 三、试着写一些复杂的布尔表达式,例如 cars > people and buses < cars。
# 四、在每一行的上面写注解,说明这一行的功用。
# 习题 31: 作出决定
print("You enter a dark room with two doors. Do you go through door #1 or door #2?")
door = input('> ')
if door == "1":
print("There's a giant bear here eating a cheese cake. What do you do?")
print("1. Take the cake.")
print("2. Scream at the bear.")
bear = input('> ')
if bear == "1":
print("The bear eats your face off. Good job!")
elif bear == "2":
print("The bear eats your legs off. Good job!")
else:
print("Well, doing %s is probably better. Bear runs away.") % bear
elif door == "2":
print("You stare into the endless abyss at Cthulhu's retina.")
print("1. Blueberries.")
print("2. Yellow jacket clothespins.")
print("3. Understanding revolvers yelling melodies.")
insanity = input('> ')
if insanity == "1" or insanity == "2":
print("Your body survives powered by a mind of jello. Good job!")
else:
print("The insanity rots your eyes into a pool of muck. Good job!")
else:
print("You stumble around and fall on a knife and die. Good job!")
# 加分习题
为游戏添加新的部分,改变玩家做决定的位置。尽自己的能力扩展这个游戏,不过别把游戏弄得太怪异了。
# 习题 32: 循环和列表
the_count = [1, 2, 3, 4, 5]
fruits = ['apples', 'oranges', 'pears', 'apricots']
change = [1, 'pennies', 2, 'dimes', 3, 'quarters']
# this first kind of for-loop goes through a list.
for number in the_count:
print("This is count %d" % number)
# same as above
for fruit in fruits:
print("A fruit of type: %s" % fruit)
# also we can go through mixed lists too
# notice we have to use %r since we don't know what's in it
for i in change:
print("I got %r" % i)
# we can also build lists, first start with an empty one
elements = []
# then use the range function to do 0 to 5 counts
for i in range(0, 6):
print("Adding %d to the list." %i)
# append is a function that lists understand
elements.append(i)
#now we can print them out too
for i in elements:
print("Element was: %d" % i)
运行结果如下:
This is count 1
This is count 2
This is count 3
This is count 4
This is count 5
A fruit of type: apples
A fruit of type: oranges
A fruit of type: pears
A fruit of type: apricots
I got 1
I got 'pennies'
I got 2
I got 'dimes'
I got 3
I got 'quarters'
Adding 0 to the list.
Adding 1 to the list.
Adding 2 to the list.
Adding 3 to the list.
Adding 4 to the list.
Adding 5 to the list.
Element was: 0
Element was: 1
Element was: 2
Element was: 3
Element was: 4
Element was: 5
Process finished with exit code 0
# 加分习题
# 一、注意一下 range 的用法。查一下 range 函数并理解它。
# 打印由函数range(5)生成从0开始小于5的整数
print(list(range(5)))
# 打印整数1到整数100的序列。
print(list(range(101)))
sum = 0
for x in range(101):
sum = sum + x
print(sum)
运行结果如下:
[0, 1, 2, 3, 4]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100]
5050
Process finished with exit code 0
# 二、在第 22 行,你可不可以直接将 elements 赋值为 range(0,6),而无需使用 for 循环?
# 可以
the_count = [1, 2, 3, 4, 5]
fruits = ['apples', 'oranges', 'pears', 'apricots']
change = [1, 'pennies', 2, 'dimes', 3, 'quarters']
# this first kind of for-loop goes through a list.
for number in the_count:
print("This is count %d" % number)
# same as above
for fruit in fruits:
print("A fruit of type: %s" % fruit)
# also we can go through mixed lists too
# notice we have to use %r since we don't know what's in it
for i in change:
print("I got %r" % i)
# we can also build lists, first start with an empty one
elements = []
elements = range(0, 6)
print(elements)
#now we can print them out too
for i in elements:
print("Element was: %d" % i)
运行结果如下:
This is count 1
This is count 2
This is count 3
This is count 4
This is count 5
A fruit of type: apples
A fruit of type: oranges
A fruit of type: pears
A fruit of type: apricots
I got 1
I got 'pennies'
I got 2
I got 'dimes'
I got 3
I got 'quarters'
range(0, 6)
Element was: 0
Element was: 1
Element was: 2
Element was: 3
Element was: 4
Element was: 5
Process finished with exit code 0
# 三、在 Python 文档中找到关于列表的内容,仔细阅读一下,除了 append 以外列表还支持哪些操作?
squares = [1, 2, 3, 4, 5]
print(squares)
# 列表可以被索引
print(squares[0])
print(squares[1])
print(squares[-1])
#列表可以被切片
print(squares[1:])
print(squares[-3:])
print(squares[:])
#列表支持连接这样的操作
print(squares + [7, 8, 9])
#列表是可变的,它允许修改元素
print(squares)
squares[3] = 1217
print(squares)
#用pop(i)方法,删除list指定位置的元素,i是索引位置
#若想删除list末尾的元素,用pop()即可
print(squares)
squares.pop(3)
print(squares)
运行结果如下:
[1, 2, 3, 4, 5]
1
2
5
[2, 3, 4, 5]
[3, 4, 5]
[1, 2, 3, 4, 5]
[1, 2, 3, 4, 5, 7, 8, 9]
[1, 2, 3, 4, 5]
[1, 2, 3, 1217, 5]
[1, 2, 3, 1217, 5]
[1, 2, 3, 5]
Process finished with exit code 0
# 习题 33: While 循环
i = 0
numbers = []
while i < 6:
print("At the top i is %d" % i)
numbers.append(i)
i = i + 1
print("Numbers now: ", numbers)
print("At the bottom i is %d" % i)
print("The numbers: ")
for num in numbers:
print(num)
运行结果如下:
At the top i is 0
Numbers now: [0]
At the bottom i is 1
At the top i is 1
Numbers now: [0, 1]
At the bottom i is 2
At the top i is 2
Numbers now: [0, 1, 2]
At the bottom i is 3
At the top i is 3
Numbers now: [0, 1, 2, 3]
At the bottom i is 4
At the top i is 4
Numbers now: [0, 1, 2, 3, 4]
At the bottom i is 5
At the top i is 5
Numbers now: [0, 1, 2, 3, 4, 5]
At the bottom i is 6
The numbers:
0
1
2
3
4
5
Process finished with exit code 0
# 加分习题
# 一、将这个 while 循环改成一个函数,将测试条件(i < 6)中的 6 换成一个变量。
# 二、使用这个函数重写你的脚本,并用不同的数字进行测试。
# 三、为函数添加另外一个参数,这个参数用来定义第 8 行的加值 + 1 ,这样你就可以让它任意加值了。
# 四、再使用该函数重写一遍这个脚本。看看效果如何。
# 五、接下来使用 for-loop 和 range 把这个脚本再写一遍。你还需要中间的加值操作吗?如果你不去掉它,会有什么样的结果?
# 习题 34: 访问列表的元素
animals = ['bear', 'python', 'peacock', 'kangaroo', 'whale', 'platypus']
print("The 1st animal is at 0 and is a", animals[0], ".")
print("The animal at 0 is the 1st animal and is a", animals[0], ".")
print("The 2nd animal is at 1 and is a", animals[1], ".")
print("The animal at 1 is the 2nd animal and is a", animals[1], ".")
print("The 3rd animal is at 2 and is a", animals[2], ".")
print("The animal at 2 is the 3rd animal and is a", animals[2], ".")
print("The 4th animal is at 3 and is a", animals[3], ".")
print("The animal at 3 is the 4th animal and is a", animals[3], ".")
print("The 5th animal is at 4 and is a", animals[4], ".")
print("The animal at 4 is the 5th animal and is a", animals[4], ".")
print("The 6th animal is at 5 and is a", animals[5], ".")
print("The animal at 5 is the 6th animal and is a", animals[5], ".")
运行结果如下:
The 1st animal is at 0 and is a bear .
The animal at 0 is the 1st animal and is a bear .
The 2nd animal is at 1 and is a python .
The animal at 1 is the 2nd animal and is a python .
The 3rd animal is at 2 and is a peacock .
The animal at 2 is the 3rd animal and is a peacock .
The 4th animal is at 3 and is a kangaroo .
The animal at 3 is the 4th animal and is a kangaroo .
The 5th animal is at 4 and is a whale .
The animal at 4 is the 5th animal and is a whale .
The 6th animal is at 5 and is a platypus .
The animal at 5 is the 6th animal and is a platypus .
Process finished with exit code 0
# 加分习题
# 一、上网搜索一下关于序数(ordinal number)和基数(cardinal number)的知识并阅读一下。
# 二、以你对于这些不同的数字类型的了解,解释一下为什么 “January 1, 2010” 里是 2010 而不是 2009?(提示:你不能随机挑选年份。)
# 三、再写一些列表,用一样的方式作出索引,确认自己可以在两种数字之间互相翻译。
# 使用 python 检查自己的答案。
三、学习总结
总结中,迟些时候再补上。