控制流 If-else while 循环 列表 for 循环 https://www.lanqiao.cn/courses/596/learning/?id=2039

我们通过实验已经学习了基本的 Python 3 语法。现在我们就来用一个挑战来巩固一下我们的实验效果。

本挑战中,我们将实现一个程序用来计算半径为 2 的圆的面积并打印输出。

提示语
import math
使用 format 可以控制输出的小数位数,可以使用 ‘{:.10f}’.format() 来进行格式化输出保留 10 位小数
注意代码文件的路径必须是 /home/shiyanlou/Code/CircleArea.py
请不要使用 input 获取输入,程序执行不需要任何输入的参数

import math
# 计算圆的面积
area = 2 * 2 * math.pi
# 格式化输出圆的面积,保留10位小数
print("{:.10f}".format(area))

控制流 If-else
网址
https://www.lanqiao.cn/courses/596/learning/?id=2039

if x:
    pass

不要像下面这样做:

if x == True:
    pass

while 循环

while condition:
    statement1
    statement2

想要多次执行的代码必须以正确的缩进放在 while 语句下面。在表达式 condition 为真的时候它们才会执行。同 if-else 一样,非零值为真。启动 python3 交互页面,让我们写一个简单的代码,它按顺序打印 0 到 10 的数字:

>>> n = 0
>>> while n < 11:
...     print(n)
...     n += 1
...
0
1
2
3
4
5
6
7
8
9
10

在第一行我们使 n = 0,然后在 while 语句中把条件设置为 n < 11,这意味着在 while 语句下面缩进的所有行将会被执行,直到 n 的值大于等于 11。在循环里我们只是打印 n 的值然后令它增一。

想想如果没有循环语句,你想要打印 0 到 10 的所有数字,那你得手动打印 11 次!

让我们来试试打印斐波那契数列。这个数列前两项为 1,之后的每一个项都是前两项之和。所以这个数列看起来就像这样: 1,1,2,3,5,8,13,…。

第一行代码中我们初始化 a 和 b。当 b 的值小于 100 的时候,循环执行代码。循环里我们首先打印 b 的值,然后在下一行将 a + b 的值赋值给 b,b 的值赋值给 a。

学习其他语言的同学在这里可能有些困惑,你可以这样理解,Python 中赋值语句执行时会先对赋值运算符右边的表达式求值,然后将这个值赋值给左边的变量。

默认情况下,print() 除了打印你提供的字符串之外,还会打印一个换行符,所以每调用一次 print() 就会换一次行,如同上面一样。

你可以通过 print() 的另一个参数 end 来替换这个换行符,就像下面这样,下面的程序写入 /home/shiyanlou/fibonacci2.py:

#!/usr/bin/env python3
a, b = 0, 1
while b < 100:
    print(b, end=' ')
    a, b = b, a + b
print()

我们来写一个程序计算幂级数:e^x = 1 + x + x^2 / 2! + x^3 / 3! + … + x^n / n! (0 < x < 1)。

该程序写入代码文件 /home/shiyanlou/powerseries.py

#!/usr/bin/env python3
x = float(input("Enter the value of x: "))
n = term = num = 1
result = 1.0
while n <= 100:
    term *= x / n
    result += term
    n += 1
    if term < 0.0001:
        break
print("No of Times= {} and Sum= {}".format(n, result))

这个程序里我们介绍一个新的关键字 break,它可以终止最里面的循环。这个例子里我们在 if 语句里使用 break:

if term < 0.0001:
break
copy
这意味着如果 term 的值小于 0.0001,那么终止循环。

这个例子里我们打印 10 以内的乘法表。写入代码文件 /home/shiyanlou/multiplication.py:

#!/usr/bin/env python3
i = 1
print("-" * 50)
while i < 11:
    n = 1
    while n <= 10:
        print("{:5d}".format(i * n), end=' ')
        n += 1
    print()
    i += 1
print("-" * 50)

这里我们在 while 循环里使用了另一个 while 循环,这被称为嵌套循环。你应该已经看到一条有趣的语句:

print("-" * 50)
copy
字符串若是乘上整数 n,将返回由 n 个此字符串拼接起来的新字符串。

下面是一些例子:

‘s’ * 10
‘ssssssssss’

print("*" * 10)


print("#" * 20)
####################

print("–" * 20)


print("-" * 40)


对上面的列表, a[0:5] 用数学表达式可以写为 [0,5) ,其索引取值为 0,1,2,3,4,所以能将a中所有值获取到。 你也可以用a[:5], 效果是一样的。

列表

>>> a = [ 1, 342, 223, 'India', 'Fedora']
>>> a
[1, 342, 223, 'India', 'Fedora']
>>> a[0]
1
>>> a[4]
'Fedora'
>>> a[-1]
'Fedora'
>>> a[0:-1]
[1, 342, 223, 'India']
>>> a[2:-2]
[223]
>>> a[:]
[1, 342, 223, 'India', 'Fedora']
>>> a[:-2]
[1, 342, 223]
>>> a[-2:]
['India', 'Fedora']

在这里插入图片描述

而a[-5:-1],因为左闭右开原则,其取值为 -5,-4,-3,-2 是不包含 -1 的。

为了取到最后一个值,你可以使用 a[-5:] ,它代表了取该列表最后 5 个值。

试图使用太大的索引会导致错误:

Python 能够优雅地处理那些没有意义的切片索引:一个过大的索引值(即大于列表实际长度)将被列表实际长度所代替,当上边界比下边界大时(即切片左值大于右值)就返回空列表:

>>> a[2:32]
[223, 'India', 'Fedora']
>>> a[32:]
[]
>>> a[1::2]
[342, 'India']

它的意思是,从切片索引 1 到列表末尾,每隔两个元素取值。

列表也支持连接这样的操作,它返回一个新的列表:

for 循环
通过 for 语句我们可以使用 for 循环。Python 里的 for 循环与 C 语言中的不同。这里的 for 循环遍历任何序列(比如列表和字符串)中的每一个元素。下面给出示例:

>>> a = ['ShiYanLou', 'is', 'powerful']
>>> for x in a:
...     print(x)
...
ShiYanLou
is
powerful
>>> a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
>>> for x in a[::2]:
...     print(x)
1
3
5
7
9

range() 函数
如果你需要一个数值序列,内置函数 range() 会很方便,它生成一个等差数列(并不是列表):

>>> for i in range(5):
...     print(i)
...
0
1
2
3
4
>>> range(1, 5)
range(1, 5)
>>> list(range(1, 5))
[1, 2, 3, 4]
>>> list(range(1, 15, 3))
[1, 4, 7, 10, 13]
>>> list(range(4, 15, 2))
[4, 6, 8, 10, 12, 14]

如同 break ,我们可以在循环中使用另一个语句 continue。它会跳过其后的代码回到循环开始处执行。这意味着它可以帮助你跳过部分循环。在下面的例子中,我们要求用户输入一个整数,如果输入的是负数,那么我们会再次要求输入,如果输入的是整数,我们计算这个数的平方。用户输入 0 来跳出这个无限循环。

#!/usr/bin/env python3
while True:
    n = int(input("Please enter an Integer: "))
    if n < 0:
        continue # 这会返回到循环开始处执行
    elif n == 0:
        break
    print("Square is ", n ** 2)
print("Goodbye")

循环的 else 语句

我们可以在循环后面使用可选的 else 语句。它将会在循环完毕后执行,除非有 break 语句终止了循环

>>> for i in range(0, 5):
...     print(i)
... else:
...     print("Bye bye")
...
0
1
2
3
4
Bye bye

这是一个非常简单的游戏。这里有 21 根棍子,首先用户选 1 到 4 根棍子,然后电脑选 1 到 4 根棍子。谁选到最后一根棍子谁就输。判断一下用户有赢的机会吗?如果没有的话,如何修改游戏规则可以使用户有赢的机会呢?

特别说明:用户和电脑一次选的棍子总数只能是 5。

#!/usr/bin/env python3
sticks = 21

print("There are 21 sticks, you can take 1-4 number of sticks at a time.")
print("Whoever will take the last stick will lose")

while True:
    print("Sticks left: " , sticks)
    if sticks == 1:
        print("You took the last stick, you lose")
        break
    sticks_taken = int(input("Take sticks(1-4):"))
    if sticks_taken >= 5 or sticks_taken <= 0:
        print("Wrong choice")
        continue
    print("Computer took: " , (5 - sticks_taken) , "\n")
    sticks -= 5

这个实验中我们了解了两种循环:while 和 for 循环,其中的 for 循环我们通常与 range() 函数配合使用,要特别注意的是,range() 函数返回的并不是列表而是一种可迭代对象:
在这里插入图片描述python 中 for 循环的 else 子句给我们提供了检测循环是否顺利执行完毕的一种优雅方法。

列表推导式

本节实验将会通过两个实例程序来熟悉 Python3 的基本数据结构:

判断学生成绩是否达标的程序
计算两个矩阵的 Hadamard 乘积

这是一个判断学生成绩是否达标的程序,要求输入学生数量,以及各个学生物理、数学、历史三科的成绩,如果总成绩小于 120,程序打印 “failed”,否则打印 “passed”。

代码写入 /home/shiyanlou/students.py 文件:

#!/usr/bin/env python3
n = int(input("Enter the number of students: "))
data = {} # 用来存储数据的字典变量
Subjects = ('Physics', 'Maths', 'History') # 所有科目
for i in range(0, n):
    name = input('Enter the name of the student {}: '.format(i + 1)) # 获得学生名称
    marks = []
    for x in Subjects:
        marks.append(int(input('Enter marks of {}: '.format(x)))) # 获得每一科的分数
    data[name] = marks
for x, y in data.items():
    total =  sum(y)
    print("{}'s total marks {}".format(x, total))
    if total < 120:
        print(x, "failed :(")
    else:
        print(x, "passed :)")

这个例子里我们计算两个矩阵的 Hadamard 乘积。要求输入矩阵的行/列数(在这里假设我们使用的是 n × n 的矩阵)。

代码写入 /home/shiyanlou/matrixmul.py 文件:

#!/usr/bin/env python3
n = int(input("Enter the value of n: "))
print("Enter values for the Matrix A")
a = []
for i in range(n):
    a.append([int(x) for x in input().split()])
print("Enter values for the Matrix B")
b = []
for i in range(n):
    b.append([int(x) for x in input().split()])
c = []
for i in range(n):
    c.append([a[i][j] * b[i][j] for j in range(n)])
print("After matrix multiplication")
print("-" * 7 * n)
for x in c:
    for y in x:
        print(str(y).rjust(5), end=' ')
    print()
print("-" * 7 * n)

在这里插入图片描述这里我们使用了几次列表推导式。[int(x) for x in input().split()] 首先通过 input() 获得用户输入的字符串,再使用 split() 分割字符串得到一系列的数字字符串,然后用 int() 从每个数字字符串创建对应的整数值。我们也使用了 [a[i][j] * b[i][j] for j in range(n)] 来得到矩阵乘积的每一行数据。
python中,(x for y in z for x in y)这个结构怎么理解?
https://blog.csdn.net/weixin_42427638/article/details/85261284

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值