2019年7月

1.列表的表现形式

[1,2,3,4,5]
['a','b','c','d']

2.用下标取得单个值

>spam = ['a','b','c','d']
>spam[0]
'a'
注意:下标为整数,否则出现报错,
>spam = [['a','b','c','d'],[1,2,3,4,5]]
>spam[1][4]
>5

3.负数下标

>spam = ['a','b','c','d']
>spam[-1]
'd'
>spam[-2]
'c'

4.利用切片取子列表

>spam = ['a','b','c','d']
>spam[0:4]
'a,','b','c','d'
>spam[0:3]
'a,','b','c'

5.利用len()语句取的列表长度

>spam = ['a','b','c','d']
>len(spam)
4

6.利用下标改变列表中的值

>spam = ['a','b','c','d']
>spam[0] = 'k'
>spam
['k,','b','c','d']

7.列表的连接和复制

>['a','b','c','d'] + [1,2,3]
['a','b','c','d',1,2,3]

>spam = ['a','b','c','d']
>spam = spam +[2,3,4]
['a','b','c','d',2,3,4]

>spam = [1,2,3]
>spam *3
[1,2,3,1,2,3,1,2,3]

8.del语句删除列表中的值

>spam = ['a','b','c','d']
>del spam[0]
>spam
['b','c','d']

编写一个名为collatz()的函数,它有一个名为number 的参数。如果参数是偶数,那么collatz()就打印出number // 2,并返回该值。如果number 是奇数,collatz()就打印并返回3 * number + 1。
然后编写一个程序,让用户输入一个整数,并不断对这个数调用collatz(),直到函数返回值1(令人惊奇的是,这个序列对于任何整数都有效,利用这个序列,你迟早会得到1!既使数学家也不能确定为什么。你的程序在研究所谓的<br>“Collatz序列”,它有时候被称为“最简单的、不可能的数学问题”)。

答案1:

def collatz(num):
    if num % 2 == 0:
        return num//2
    elif num % 2 == 1:
        return 3*number +1
try:
    print("请输入数字:")
    number = int(input())
    while True:
        number = collatz(number)
        print(number)
        if number == 1:
            break
except ValueError:
    print("请输入整数")

答案2:

print("This is The Collatz Sequence")
user = int(input("Enter a number: "))


def collatz(n):
    print(n)
    while n != 1:
        if n % 2 == 0:
            n = n // 2
            print(n)
        else:
            n = n * 3 + 1
            print(n)


collatz(user)

答案3:

def collatz(number):
    if number % 2 == 0:
        return number // 2
    elif number % 2 == 1:
        return 3 * number + 1

chosenInt = int(input('Enter an integer greater than 1: '))

print(chosenInt)

while chosenInt != 1:
    chosenInt = collatz(chosenInt)
    print(chosenInt)

例子:

def spam(div):
    return 42/div
print(spam(2))
print(spam(12))
print(spam(0)
print(spam(1)

运行以上程序则:

21.0
3.5
Traceback (most recent call last):
  File "\\localhost\D$\ 异常处理.py", line 5, in <module>
    print(spam(0))
  File "\\localhost\D$\ 异常处理.py", line 2, in spam
    return 42/div
ZeroDivisionError: division by zero

上面报错中出现的意思是0不能作为除数

例子修复1:

def spam(div):
    try:
        return 42/div
    except ZeroDivisionError:
        print("Error:Invalid argument.")

print(spam(2))
print(spam(12))
print(spam(0))
print(spam(1))

遇到问题继续往下执行,输出结果为:

21.0
3.5
Error:Invalid argument.
None
42.0

例子修复2:

def spam(div):
    return 42/div

try:
    print(spam(2))
    print(spam(12))
    print(spam(0))
    print(spam(16))
except ZeroDivisionError:
    print("Error:Invalid argument.")

遇到异常不往下执行,输出的结果为:

21.0
3.5
Error:Invalid argument.

例子:

def spam():
    global egg
    egg = 'spam'
    print(egg)
egg = 'global'
spam()
print(egg)

例子中def spam() 中使用global语句声明了egg属于全局变量,在后面全局的时候又声明了一次egg所以后面全局的egg值不生效
所以输出的结果为:
spam
spam

例子:

def spam():
    egg = "spam local"
    print(egg)
def bacon():
    egg ="bacon local"
    print(egg)
    spam()
    print(egg)
egg = "glocal"
bacon()
print(egg)

局部作用域的值只在局部作用中有效,超出局部则销毁,例子中最后结果 第一步输出了bacon()中的egg 第二步输出spam()的结果,第三步输出 bacon()中的egg,第四步输出 全局egg的值,所以结果为:

bacon local
spam local
bacon local
glocal