python入门篇04-循环(while与for),变量,函数基础


1. 前言

1.1 上文传送

===> 传送门: python基础环境配置

2. python基础使用

2.1 while循环

2.1.1 while循环的使用

counts = 0
while counts < 100:
    print(f"我是循环的第{
      
      counts + 1}次")
    counts += 1
print("循环结束!")

=> 案例: 猜数字游戏(多经典…)

java基础是猜字符游戏 这里就猜数字

guess_counts = 0
guess_num = random.randint(1, 100)
print(f"提前透露一下结果:{
      
      guess_num}")
while True:
    guess_input = int(input("请输入猜的数字\n"))
    guess_counts += 1
    if guess_num > guess_input:
        print(f"猜小了,现在是猜的第 {
      
      guess_counts}次, 重猜!")

    if guess_num < guess_input:
        print(f"猜大了,现在是猜的第 {
      
      guess_counts}次, 重猜!")

    if guess_num == guess_input:
        break

print(f"猜对了,结果就是{
      
      guess_num}, 总共: {
      
      guess_counts}次")

2.1.2 while双层循环

嵌套循环 循环次数 是 外侧*内侧 数量

=> 案例: 输出9*9乘法表

# 写一个9*9乘法表吧
a = 1
while a <= 9:
    b = 1
    while b <= a:
        print(f"{
      
      b}*{
      
      a}={
      
      a * b} \t", end='')
        b += 1
    a += 1
    print("")

=> 运行结果

在这里插入图片描述

2.2 for循环

2.2.1 for循环使用

in 后面放处理数据(序列类型,字符串,裂变,元组)

str1 = "zhang_san"
for x in str1:
    print(x)

=> 案例: (字符串)查出有多少字符

count = 0
test = "zhang_san is a good boy"
for i in test:
    if i == "o":
        count += 1
print(f"o重复了: {
      
      count}次")

2.2.2 方法range()的使用

range(num) 解释: 0到num-1的数字序列[0,1,2,…,num-1]
range(num1,num2) 解释: [num1,num+1,…,num2-1]
range(num1,num2,step) 解释: [num1,num1+step,num1+step+step,…,num2-1] 默认加一变加2

# 输出0-9
for i in range(10):
    print(i)

# 输出5-9
for i in range(5, 10):
    print(i)

# 输出5,8
for i in range(5, 10, 3):
    print(i)

ps: 注意临时变量的作用域

临时变量的作用域( python是警告 java 直接编译报错)
规范写法 (临时变量 不要直接操作)
下面是标准写法

a = 0
for a in range(5):
    print(a)
print(a)

=> 案例 计算0-100的偶数数量

答案是: 51个偶数

even_counts = 0
for i in range(101):
    if i % 2 == 0:
        even_counts += 1
print(f"偶数的数量是: {
      
      even_counts}个")

2.2.3 for的嵌套循环

for循环中加入for循环

=> 案例: 9*9的乘法表(for版)

print("循环开始-----------------------> ")
for a in range(1, 10):
    for b in range(1, a + 1):
        print(f"{
      
      b} * {
      
      a} = {
      
      a * b} \t", end="")
    print("")
print("循环结束-----------------------> ")

2.2.4 continue与break使用

continue和 break (很简单 不测试了)
continue 表示当前层循环跳过, 后面变量继续执行 影响一次
break 表示当前层 循环结束 直接返回上一层了 影响一层

2.3 函数def

2.3.1 函数的定义

def 函数名(传入参数):
    函数体
    return 返回值

2.3.2 函数的优势

封装了公共操作行为, 代码更加简洁, 调用更方便
(封装思想)

2.3.3 具体使用方式

nums1 = "123"


# 改造上面方法 返回总数和 (形式参数用,分割)
# def new_sum(nums1,num2):
def new_sum(nums):
    sum_total = 0
    for num1 in nums:
        sum_total += int(num1)
    return sum_total


# 返回是数字 输出数字
print(new_sum(nums1))  # 传入实际参数

2.3.4 返回值return 与 无返回值

[与java有不同 java 是真没返回值 void]
python中的无返回值-> 准确来说是 无return关键字
是有返回值, 返回值是None

  • None的字面量(类型NoneType)
  • None值 与java的 null 意思一样 但是在if判断中
    可以表示False
def test02(num):
    """
    函数的文档注释: 大于2 返回yes字符串 其他返回None(if里是布尔类型)
    :param num: 传入数字
    :return: None/字符串
    """
    if num > 2:
        return "YES"
    else:
        return None


test2 = test02(3)
if test2:
    print(f"大于2: {
      
      test2}")

if not test2:  # None 直接可以表示False
    print("大于2: 不成立")

2.3.5 函数嵌套

def fun_b():
    print("---B---")
    fun_c()


def fun_a():
    print("---A---")
    fun_b()


def fun_c():
    print("---C---")


fun_a()  # A->B->C 方法

2.4 函数内的变量使用

2.4.1 函数内局部变量不可直接使用

#  局部变量
# def fun_test01():
#     a1 = 20
#
#
# print(a1)  # 直接报错 局部变量 不可使用

2.4.2 全局变量 global 关键字

全局变量(函数外面定义)

  • global关键字声明的变量就是全局变量
  • 任意位置修改
  • 全局变量都会变化

局部变量(解释,按照地址角度)

  • 局部变量的内存,是在栈内存中的
  • 函数入栈后,存入函数局部变量的地址
  • 就算名字相同 与 全局变量的地址指向的也不是同一个
a1 = 100


# 不会对全局变量产生影响
def fun_test01():
    a1 = 20  # 局部变量 任何操作都不会对全局造成影响 换句话说 不是一个变量
    print(f"{
      
      a1}")


def fun_test02():
    global a1
    a1 += 20
    print(f"{
      
      a1}")


fun_test01()
print(a1)

fun_test02()
print(a1)

3. 基础语法总结案例

3.1 案例: 公司发奖金(for循环与条件)

-> 3.1.1 案例简介

  • 一共一万元奖金 20人发(编号1-20)
  • 每个人都有绩效 (随机1-10) 低于5 不发
  • 其余正常 发了输出 奖池剩余金额
  • 奖池金额发没了 直接结束
  • 最后整体提示: 奖金发完了,下个月领取

-> 3.1.2 代码实现

import random

salary_sum_money = 10000
salary_per_money = 1000

for person_num in range(1, 21):

    if salary_sum_money <= 0:
        print(f"!!! 员工编号:{
      
      person_num}以及之后的编号,奖金发没了,下个月领取!")
        break

    performance_score = random.randint(1, 10)

    if performance_score < 5:
        print(f"员工编号:{
      
      person_num},您的绩效分数是: {
      
      performance_score}, 很抱歉没有奖金")
        continue

    salary_sum_money -= salary_per_money

    print(f"员工编号: {
      
      person_num},您的绩效分数是: {
      
      performance_score}分,"
          f"已发放: {
      
      salary_per_money}元,剩余奖金: {
      
      salary_sum_money}元")

print(f"本次奖金发放结束, 剩余奖金金额: {
      
      salary_sum_money}元")

-> 3.1.3 运行结果


多测几次, 看看执行结果
注意: 一个细节 奖金发放完毕的if逻辑
最好写<=, 不要写= (来自java代码的经验)

员工编号: 1 ,您的绩效分数是: 7分 ,已发放: 1000元 ,剩余奖金: 9000元
员工编号: 2 ,您的绩效分数是: 9分 ,已发放: 1000元 ,剩余奖金: 8000元
员工编号:3 ,您的绩效分数是: 2 , 很抱歉没有奖金
员工编号: 4 ,您的绩效分数是: 10分 ,已发放: 1000元 ,剩余奖金: 7000元
员工编号: 5 ,您的绩效分数是: 7分 ,已发放: 1000元 ,剩余奖金: 6000元
员工编号:6 ,您的绩效分数是: 3 , 很抱歉没有奖金
员工编号:7 ,您的绩效分数是: 2 , 很抱歉没有奖金
员工编号:8 ,您的绩效分数是: 4 , 很抱歉没有奖金
员工编号: 9 ,您的绩效分数是: 8分 ,已发放: 1000元 ,剩余奖金: 5000元
员工编号:10 ,您的绩效分数是: 3 , 很抱歉没有奖金
员工编号:11 ,您的绩效分数是: 4 , 很抱歉没有奖金
员工编号:12 ,您的绩效分数是: 3 , 很抱歉没有奖金
员工编号: 13 ,您的绩效分数是: 10分 ,已发放: 1000元 ,剩余奖金: 4000元
员工编号: 14 ,您的绩效分数是: 8分 ,已发放: 1000元 ,剩余奖金: 3000元
员工编号: 15 ,您的绩效分数是: 6分 ,已发放: 1000元 ,剩余奖金: 2000元
员工编号: 16 ,您的绩效分数是: 7分 ,已发放: 1000元 ,剩余奖金: 1000元
员工编号:17 ,您的绩效分数是: 1 , 很抱歉没有奖金
员工编号: 18 ,您的绩效分数是: 10分 ,已发放: 1000元 ,剩余奖金: 0元
!!! 员工编号:19 以及之后的编号,奖金发没了,下个月领取!
本次奖金发放结束, 剩余奖金金额: 0元

3.2 案例: ATM存钱,取钱,查询余额(python版)

===> 传送门: ATM 存钱 取钱 查询余额 (python版)案例

4. 文章总结与预告

4.1 文章总结

  1. 全局变量与局部变量的使用
  2. for循环与while 循环的使用
  3. 函数定义位置 从上到下
  4. 关键字global使用
  5. range()方法使用
  6. 返回值 return 与 None
  7. 案例中的细节使用

4.2 文章预告

数据容器

  • 列表 (java的list[不太一样])
  • 元组 (java的 final 数组[不太一样])
  • 字符串 (java的byte[][类似])
  • 集合 (java的set集合[类似])
  • 字典 (java的map 写法就是json写法[基本类似])

数据容器的api操作

  • 增删改查(对数据容器的) , 不是mysql

作者pingzhuyan 感谢观看
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/pingzhuyan/article/details/132413798