Python 1-04 循环语句

控制结构语句 循环语句

循环就是 重复做 某件事

一、for

for 变量名 in 可迭代对象:
	# 循环操作的代码

关键字:in 如果在指定的序列中找到值返回 True,否则返回 False。
not in 如果在指定的序列中没有找到值返回 True,否则返回 False。

迭代(遍历) 就是按照某种顺序逐个访问对象中的每一项。
Python 中有很多对象都是可以通过 for 语句来直接遍历的,例如 list、string、dict 等等,这些对象都是可迭代的,被称为可迭代对象。
可以将可迭代对象想象成一个容器,里面存放了有限个元素,并且每个元素都可以从中获取出来。那么这个容器就是可迭代的,这个容器就是可迭代对象。

内置函数:range 函数用来 生成 包含连续多个整数的 range 对象,具体格式如下:

range(end)range(start,end[,step])

参数说明:

  • start:计数从 start 开始,默认是从 0 开始;
  • stop:计数到 stop 结束,但是不包括 stop;
  • step:步长,默认为 1。

求 1 到100 的和

sum = 0 # 用于记录和
for i in range(1, 101):
	sum += i
print(sum)

二、while

求 1 到100 的乘积

product = 1
for i in range(1, 101):
    product *= i

print(product)

三、break 和 continue

break 结束当前循环
continue 结束本次循环,继续判断条件执行下一次循环。

遍历列表 arr = [2, 3, 6, 4, 5, 0, 2, 5],求偶数的和,遇到 0 终止遍历。

arr = [2, 3, 6, 4, 5, 0, 2, 5]
sum_ = 0
for x in arr:
    if x == 0:
        break
    if x % 2:
        continue
    sum_ += x        

print(sum_)

四、else

循环语句和 else 配合使用,非 break 终止循环,即正常结束循环,不是通过 break 跳出的,才执行 else 代码。
判断一个数是质数

n = 565345
for i in range(2, n):
    if n % i == 0:
        print(n, "是合数")
        break
else:
     print(n, "是质数")

输出 100 以内的素数

prime = []
for i in range(2,100):
	# 如:int(97**0.5) = 9 循环 8 次就可以了,a = b*c,b 和 c 至少有一个 <= a 的平方根。 
	# for j in range(2,i):
    for j in range(2,int(i**0.5)+1):     
        if not i % j:
            break
    else:
        prime.append(i)

for i in prime:
    print(i, end=' ')

1184. 公交站间的距离

知识点: 交换 sum

class Solution:
    def distanceBetweenBusStops(self, distance: List[int], start: int, destination: int) -> int:       
        if destination < start: # 交换出发点和目的地距离相等
            start, destination = destination, start            
        d = sum(distance[start : destination]) # 出发点到目的地距离
        return min(d, sum(distance) - d)

基础知识

判断奇偶性

% 模运算符,n % 2
& 位运算符 与,n & 1 # 位运算符 与(&)

切片

切片指的是对序列进行截取,选取序列中的某一段。
切片的语法是: list[start:end:step]
在这里插入图片描述
冒号分割索引,start 代表 起点索引,end 代表 结束点索引。省略 start 表示以0开始,省略 end 表示到列表的结尾。注意,区间是左闭右开的!。分片不会修改原有的列表,可以将结果保存到新的变量。

如果提供的是负整数下标,则从列表的最后开始往头部查找。
切片过程中还可以设置 步长,以第二个冒号分割,例如 list[3:9:2],表示每隔多少距离取一个元素。

求和

sum(iterable[, start]) # python 内置函数

iterable – 可迭代对象,如:列表(list)、元组(tuple)、集合(set)、字典(dictionary)。
start – 指定相加的参数,如果没有设置这个值,默认为 0。

sum([1,2,3])         # in list
sum([1,2,3],5)       # in list +start
sum((1,2,3))         # in tuple
sum({1,2,3})         # in set
sum({1:5,2:6,3:7})   # in dictionary key
sum(range(1,4))      # in range()

sum(i % 2 == 0 for i in position) # 生成器 偶数的个数

自己编写代码实现最大值和求和

arr = [1,2,3,4,5,6]
max_ = -float("inf") # 注意初始化时取 arr 中最小数或更小的数,一般取无穷小 -float("inf")
sum_ = 0 
for x in arr:
	if x > max_: max_ = x
	sum_ += x # 累加
print("最大值:", max_, "和:", sum_)

swap 交换

a, b = b, a # 右边取得的原来的值 注意和 a = b; b = a 不同。

五、示例——猜数字游戏

https://developer.mozilla.org/zh-CN/docs/Learn/JavaScript/First_steps/A_first_splash
看看自己能看懂多少?
Python 1-04 循环语句_第1张图片
思考:

随机生成一个 100 以内的自然数。randomNumber = random.randint(1,100)
记录玩家当前的轮数。从 1 开始。guessCount
为玩家提供一种猜测数字的方法。
一旦输入选择,先将其记录下来,以便用户可以看到他们先前的猜测。
然后检查它是否正确。
如果正确:
显示祝贺消息。
如果出错,并且玩家有剩余轮次:
告诉玩家他们错了。
允许他们输入另一个猜测。
轮数加 1。
如果出错,并且玩家没有剩余轮次:
告诉玩家游戏结束。

import random

title = '''
        猜数字游戏

我刚才随机选定了一个100以内的自然数。
看你能否在 10 次以内猜中它。
每次我都会告诉你所猜的结果是高了还是低了。'''

print('--------------------------------')
print(title) # 打印说明
print('--------------------------------')

randomNumber = random.randint(1,100) # 1 到 100 之间的一个随机数
textContent = '' # 用于记录每次输入的 数字 

for guessCount in range(10): # 共有 10 次机会
    userGuess = input('请猜数:') # 接收你猜的数
    
    if userGuess.isdigit(): # 如果你输入的是数字执行下面程序,否则的话 执行 else 

        userGuess = int(userGuess) # 字符串 转成 整数
        
        if guessCount > 0: # 跳过第一次 从第二次开始才有上次猜的数
            print( f'上次猜的数:{textContent}')
            
        print(f'第 {guessCount+1} 次') # 共猜了几次啦,因为 guessCount 是从 0 开始的
        textContent += str(userGuess) + ' ' # 记录每次输入的 数字 累加
        
        if userGuess == randomNumber: # 你猜的数正好是 开始的随机数 
            print('恭喜你!猜对了')
            break   # 如果从这里结束说明你猜对了,不会执行最后的 else 即 OVER   
            
        else: # 上面是猜对了,这里是你猜错的处理
            print('你猜错了!')    
            
            if userGuess < randomNumber: # 如果猜错了给出是高了还是低了
                print('你猜低了!') 
            else:
                print('你猜高了')
                
    else: # 和 if userGuess.isdigit() 是一对
        print('你的输入不正确!') # 当你输入的不是纯数字会执行

else: # for 循环的 else ,只有 上面执行完 10 次,而不是 通过 break 终止的循环 才执行下面的语句
    print('!!!GAME OVER!!!') # OVER

你可能感兴趣的:(Python,教学,python,开发语言)