Skip to content

Latest commit

 

History

History
422 lines (295 loc) · 8.63 KB

File metadata and controls

422 lines (295 loc) · 8.63 KB
Error in user YAML: (<unknown>): found a tab character that violate indentation while scanning a plain scalar at line 3 column 3
---
- oeasy Python 0079
- 这是 oeasy 系统化 Python 教程,从基础一步步讲,扎实、完整、不跳步。愿意花时间学,就能真正学会。
- 本教程同步发布在: 
	- 个人网站: `https://oeasy.org` 
	- 蓝桥云课: `https://www.lanqiao.cn/courses/3584` 
	- GitHub: `https://github.com/overmind1980/oeasy-python-tutorial` 
	- Gitee: `https://gitee.com/overmind1980/oeasypython` 
---

[oeasy]python079_如何产生随机数字_random_随机来源

回忆上次内容

图片描述

  • 字符串 就是 字符的串

    • 字符串长度 可以用 len函数
    • 字符可以用下标索引 []
      • 可以有正索引
      • 也可以有负索引
  • 可以有随机数字吗?🤔

    • 怎么玩呢?🤔

搜索

  • 向ai提问🙋

图片描述

  • 得到 random.randint 函数
    • 去游乐场 一探究竟

具体使用

import random
random.randint(1, 10)
random.randint(1, 10)
random.randint(1, 10)
  • 导入 random 包
    • 确实可以返回数字
    • 左右两个端点都能到达

图片描述

  • 确实找到了这random包
    • random包位于 /usr/lib/python3.8/random.py
    • 就像找到 当时自己做的包(my_file) 一样

图片描述

  • random包中的randint啥意思🤔

查询帮助

  • 查询 random.randint 的 帮助
help(random.randint)
  • randint
    • rand 随机
    • int 整数
    • 随机整数

图片描述

  • random.randint

    • 有两个参数
      • 个边界端点
      • 两个边界 都有可能得到
    • 返回值类型 是 整数
  • 离开游乐场

    • 去写个随机数 py程序

尝试

vi random.py
  • 编辑random.py
import random
r = random.randint(1, 10)
print(r)
  • 保存并运行

出错了

  • 报错了
    • 注意 红框

图片描述

  • random模块
    • 来自于 /home/shiyanlou/random.py
    • 这好像 不是系统的random包
  • 系统的random包
    • 在哪儿来着呢?

寻找

  • 退出vim
    • 向上翻

图片描述

  • random包位于
    • /usr/lib/python3.8/random.py
    • 引入的random包
    • 不是系统给的random包?!😱

导入过程

  • 导入random时
import random
  • 程序会在 当前位置 先找 random.py
    • 找到了 本地这个文件
      • /home/shiyanlou/random.py
  • 就 不再找 了
    • 真正需要导入的
      • /usr/lib/python3.8/random.py

图片描述

  • 说白了就是
    • 导错 位置了!

冷静

图片描述

  • 出错
    • 不是我们无能的标志
    • 而是 我们努力的见证
    • 更是 进步的阶梯

图片描述

  • 去修改!

程序改名

  • 本地的random.py
    • 不能 再重名了
    • 必须改名
    • 改为 random_new.py
mv random.py random_new.py
  • 将random.py的文件名
    • 改为 random_new.py

图片描述

  • 目前状态
    • random.py消失了
    • 可以看到 random_new.py

新想法

  • 想求两个随机数的和

图片描述

  • 怎么写提示词呢?🤔

提问

使用python里面编写终端程序,生成两个十以内的随机整数,然后让这两个数相加,得到结果。显示整个加法过程。不要使用函数,直接执行就好。

图片描述

新建文件

vi random_add.py
  • 新建random_add.py
import random

# 生成两个10以内的随机整数
num1 = random.randint(0, 10)
num2 = random.randint(0, 10)

# 计算和
sum_result = num1 + num2

# 显示加法过程
print(f"生成的两个随机数是: {num1} 和 {num2}")
print(f"{num1} + {num2} = {sum_result}")

结果

  • 效果很好

图片描述

  • 想出一道十以内加法的题目
    • 让小朋友在终端做题
    • 然后计算机负责判断对错
    • 对了打✅
    • 错了打❌

提问

图片描述

import random

# 生成两个10以内的随机整数
num1 = random.randint(0, 10)
num2 = random.randint(0, 10)

# 计算正确的和
correct_sum = num1 + num2

# 显示加法题目
print(f"请计算: {num1} + {num2} = ?")

# 获取用户输入的答案
user_answer = input("请输入你的答案: ")

# 将用户输入转换为整数
try:
    user_answer = int(user_answer)
except ValueError:
    print("请输入一个有效的整数!")
    exit()

# 判断用户答案是否正确
if user_answer == correct_sum:
    print("✅ 正确!")
else:
    print(f"❌ 错误!正确答案是: {correct_sum}")

结果

  • 效果达成
    • 程序也完全能够看懂😄

图片描述

  • 想让小朋友做十以内的加法
    • 做对3道之后
    • 停止

提问

图片描述

import random

# 初始化变量
correct_count = 0  # 记录做对题目的数量
max_correct = 3    # 达到这个数量后停止

# 循环,直到小朋友做对三道题
while correct_count < max_correct:
    # 生成两个1到10之间的随机数
    num1 = random.randint(1, 10)
    num2 = random.randint(1, 10)
    
    # 生成题目
    question = f"{num1} + {num2} = ?"
    
    # 获取用户答案
    try:
        user_answer = int(input(question + " "))
        
        # 计算正确答案
        correct_answer = num1 + num2
        
        # 检查答案是否正确
        if user_answer == correct_answer:
            print("Correct!")            
            correct_count += 1  # 答对题目,计数器增加
        else:
            print("Wrong! The correct answer is:", correct_answer)
            correct_count = 0  # 重置计数器,因为这次没做对
    except ValueError:
        print("Please enter a valid number.")

    # 检查是否达到三道题
    if correct_count == max_correct:
        print("Great job! You've answered three questions correctly.")
    else:
        print(f"Keep going! You've got {max_correct - correct_count} more to go.")

# 结束
print("Practice finished.")

效果

图片描述

  • 如果出错了呢?

图片描述

  • 目前是必须连续三次答对才退出
    • 我需要累积三次答对就可以退出

三问

图片描述

  • 新建文件
vim random_add_2.py

新代码

import random

# 初始化变量
correct_count = 0  # 记录做对题目的数量
max_correct = 3    # 达到这个数量后停止

# 循环,直到小朋友累积做对三道题
while correct_count < max_correct:
    # 生成两个1到10之间的随机数
    num1 = random.randint(1, 10)
    num2 = random.randint(1, 10)
    
    # 生成题目
    question = f"{num1} + {num2} = ?"
    
    # 获取用户答案
    try:
        user_answer = int(input(question + " "))
        
        # 计算正确答案
        correct_answer = num1 + num2
        
        # 检查答案是否正确
        if user_answer == correct_answer:
            print("Correct!")
            correct_count += 1  # 答对题目,计数器增加
        else:
            print("Wrong! The correct answer is:", correct_answer)
    except ValueError:
        print("Please enter a valid number.")

    # 检查是否达到三道题
    if correct_count == max_correct:
        print("Great job! You've answered three questions correctly.")
    else:
        print(f"Keep going! You've got {max_correct - correct_count} more to go.")

# 结束
print("Practice finished.")

最终效果

  • 满足要求了

图片描述

  • 两个程序之间有什么区别呢?

对比代码

vimdiff random_add.py random_add_2.py

图片描述

  • 只删了一句话
    • 原来的29句
    • 错误之后不清零了

总结

  • 这次主要是 随机数的生成
    • 使用 random包中的 randint(a,b)函数
    • 生成[a,b]范围中的整数
      • 包括 两端 a,b

图片描述

  • 手机验证码 可以自己生成吗?🤔
  • 下次再说 👋
  • 配套视频

  • 本文来自 oeasy Python 系统教程。
  • 想完整、扎实学 Python,
  • 搜索 oeasy 即可。