1.P89页练习8-9

def show_message(new_message,ok_message):
    while new_message:
        now_message = new_message.pop()
        print(f"ok messages are:{now_message}")
        ok_message.append(now_message)
        print(f"传输完成的message:{ok_message}")

new_message = ['ms1','ms2','ms3','ms4','ms5']
ok_message = []

show_message(new_message,ok_message)

在上述代码中,while new_message: 表达式的含义是只要 new_message 不为空,就会执行循环体内的代码。这是因为在Python中,非空列表会被视为True,而空列表会被视为False

如果将 while new_message == True: while new_message == False: 改为这样的条件,将会导致循环的行为不符合预期。因为在这种情况下,条件表达式会直接判断 new_message 是否等于布尔值 True False,而不是判断 new_message 是否为空列表。无论new_message是否为空列表,这两个条件表达式始终会返回False,导致循环体内的代码不会被执行。

因此,正确的方式是使用 while new_message: 来判断列表是否为空,以便正确执行循环。

2.这段代码为何会输出None?

def make_shirt(size,word):
    
    return print(f"This is a {size} t-shirt with the word {word}")

clothes1 = make_shirt(size="small",word="1")
print(clothes1)

这段代码中会输出None的原因是因为在函数make_shirt()中,return语句返回的是print()函数的返回值,而print()函数总是返回None。因此,虽然make_shirt()函数内部打印出了一条带有参数的字符串,但是它实际上并没有返回任何有用的值。

当你执行clothes1 = make_shirt(size="small",word="1")时,函数make_shirt()会被调用,并且会打印出"This is a small t-shirt with the word 1"这样一条字符串。但是由于return语句返回的是print()函数的返回值(即None),所以clothes1的值也是None