Python Revisited Day 01

逻辑操作符

身份操作符 is

a = ['AAA', 3, None]
b = ['AAA', 3, None]
a is b #False
b = a
a is b #True

身份比较速度快,原因是对直接对内存地址进行比较,所以内容相同的俩个变量结果却是false。

a = None
a is None #True

比较操作符
这里只要注意一点

0 <= a <= 10

这种结链比较是可以的,夸张一点

a < b < c < e < d

逻辑操作符
逻辑操作符:and or not
其中 and or 都使用short-circuit逻辑实现

5 and 2 #2
2 and 5 #5
5 and 2 and 3 #3
5 or 2 #5
2 or 5 #2
2 or 3 or 5 #2
2 or 3 and 5 #2
2 and 3 or 5 #3
2 or 3 and 4 and 5 and 6 and 7 #2
2 or 3 and 4 and 0 #2
0 or 3 and 4 and 5 #5
True and 1 # 1
1 and True # True

还可以得出结论, and 的优先级大于 or

算术操作符

a = 1
a += 8
a = a + 8

这里需要记住的是,python中,int数据类型是固定的,一旦赋值就不能改变。因此,对固定的对象使用增强的赋值操作符时,实际上是创建一个对象来存储结果,之后,目标对象重新绑定。所以上面的:a+=8语句执行的时候,python 会计算a+8,将所得的结果9存储到新的int对象,之后将a重新绑定为引用这个新的int对象(如果a原来引用的原始对象没有其他对象引用,就会进入垃圾收集流程)。
第二 a+=8 与 a = a + 8 并不一致,这个没怎么明白。
特殊用法:

name = 'xxx'
name + 'ccc' #xxxccc
name += 'ccc' #xxx ccc

与int一样 字符串也是固定的,所以流程和上述相同,
不过列表在python中是可变的

a = ['a', 'b', 'c']
a += 'ddd' #['a', 'b', 'c', 'd', 'd', 'd']
a += ['ddd'] #['a', 'b', 'c', 'd', 'd', 'd', 'ddd']
a += 5 #报错

列表 += 右边的操作数必须是 iterable 对象

题目

1.生成数字

import random

digits = [7, 1, 9, 4, 2, 8, 3, 0, 6]
Digits = [[random.randint(1, 1000) for j in range(7)] for i in range(10)]

try:
    row = 0
    while row < 7:
        line = ''
        column = 0
        while column < len(digits):
            number = int(digits[column])
            digit = Digits[number]
            line += str(digit[row]) + ' '
            column += 1
        print(line)
        row += 1
except IndexError:
    print('usage: <number>')
except ValueError as err:
    print(err, 'in', digits)

2.循环输入数字输出长度,和,最大最小值,平均值

try:
    digits = []
    while True:
        a = input('enter a number or Enter to finish: ')
        if not a and a != 0:
            break
        else:
            digits.append(int(a))
    print('numbers: ', digits)
    print('count = ', len(digits), ' sum = ', sum(digits), 
    ' lowest = ', min(digits), ' highest = ', max(digits),
          'mean = ', sum(digits) / len(digits))
except ValueError as err:
    print(err, 'in', a)
  1. 超级超级巨大巨大罪过的诗
import random

article = ['a', 'the', 'this', 'that']
theme = ['cat', 'fish', 'dog', 'pig', 'car', 'house', 'tree']
verb = ['flied', 'walked', 'runned', 'smiled', 'jumped']
adv = ['loudly', 'quietly', 'well', 'badly']


try:
    count = 0
    while count < 5:
        line = article[random.randint(0, len(article) - 1)] + ' ' +\
               theme[random.randint(0, len(theme) - 1)] + ' ' +\
               verb[random.randint(0, len(verb) - 1)] + ' ' +\
               adv[random.randint(0, len(adv) - 1)]
        print(line)
        count += 1
except IndexError:
    print('error index')

4.用户指定行数

import random

article = ['a', 'the', 'this', 'that']
theme = ['cat', 'fish', 'dog', 'pig', 'car', 'house', 'tree']
verb = ['flied', 'walked', 'runned', 'smiled', 'jumped']
adv = ['loudly', 'quietly', 'well', 'badly']


try:
    count = 0
    uplimit = int(input('the rows you need between 1 and 10: '))
    if not uplimit or not 1<= uplimit <= 10:
        uplimit = 5
    while count < uplimit:
        line = article[random.randint(0, len(article) - 1)] + ' ' +\
               theme[random.randint(0, len(theme) - 1)] + ' ' +\
               verb[random.randint(0, len(verb) - 1)] + ' ' +\
               adv[random.randint(0, len(adv) - 1)]
        print(line)
        count += 1
except IndexError:
    print('error index')

5.自制排序程序(从小到大)

import random

number = [random.randint(1, 99) for i in range(10)]
print(number)
try:
    length = len(number)
    for i in range(length - 1):
        for j in range(i + 1, length):
            if number[i] > number[j]:
                number[i], number[j] = number[j], number[i]
    print(number)
except IndexError:
    print('index error')

很粗暴的一种排序方式,不过不计较这么多了,简单易懂就行。
。。。

posted @ 2018-09-13 21:54  馒头and花卷  阅读(117)  评论(0编辑  收藏  举报