[oeasy]python080如何生成验证码_随机数字密码_真随机

简介: 本文介绍了如何生成随机验证码的过程,从简单的随机数字生成到包含数字、大小写字母及符号的复杂验证码。通过 Python 的 `random` 和 `string` 模块,逐步扩展字符集并确保结果满足特定要求(如包含各类字符)。同时探讨了随机数生成的本质,指出计算机中的“随机”实际上是基于算法和种子值的伪随机,并非真正的物理随机。最后总结了验证码的生成原理及其在实际应用中的意义,为读者揭开日常生活中验证码背后的编程逻辑。

如何生成验证码_随机数字密码_真随机

回忆上次内容

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

  • 手机验证码 可以自己生成吗?🤔

提问

  • 但是这样的话
  • 最小值 也得是 100000
  • 第1位 不能是0 了

再问

  • 看起来做了个循环
  • 代码可以理解
import random
# 生成一个6位的随机数字,每位数字可以是0-9
random_number = ""
for _ in range(6):
    random_digit = random.randint(0, 9)
    random_number += str(random_digit)
# 显示生成的随机数字
print(f"生成的6位随机数字是: {random_number}")

结果

  • 运行成功

  • 我想要结果
  • 不止包括数字
  • 还包括大小写字母

  • 可以吗?

提问

import random
import string
# 定义字符集,包括数字、大写字母和小写字母
characters = string.digits + string.ascii_uppercase + string.ascii_lowercase
# 生成一个6位的随机字符串
random_string = ""
for _ in range(6):
    random_char = random.choice(characters)
    random_string += random_char
# 显示生成的随机字符串
print(f"生成的6位随机字符串是: {random_string}")
  • 看起来 取值范围 扩大了
  • characters = string.digits + string.ascii_uppercase + string.ascii_lowercase

结果

  • 想要出了数字、大小写字母
  • 还包括符号

再问

import random
import string
# 定义字符集,包括数字、大写字母、小写字母和符号
characters = string.digits + string.ascii_uppercase + string.ascii_lowercase + string.punctuation
# 生成一个6位的随机字符串
random_string = ""
for _ in range(6):
    random_char = random.choice(characters)
    random_string += random_char
# 显示生成的随机字符串
print(f"生成的6位随机字符串是: {random_string}")
  • 取值范围 更大了
  • characters = string.digits + string.ascii_uppercase + string.ascii_lowercase + string.punctuation

结果

  • 结果有可能没有某类符号
  • 想要结果必须包含
  • 数字
  • 大写字母
  • 小写字母
  • 符号

  • 在原来的上下文基础上
  • 继续追加提问

提问

import random
import string
# 定义字符集
digits = string.digits  # 数字
uppercase_letters = string.ascii_uppercase  # 大写字母
lowercase_letters = string.ascii_lowercase  # 小写字母
punctuation = string.punctuation  # 符号
# 确保生成的字符串中包含至少一个数字、一个大写字母、一个小写字母和一个符号
random_string = [
    random.choice(digits),
    random.choice(uppercase_letters),
    random.choice(lowercase_letters),
    random.choice(punctuation)
]
# 从所有字符集中选择剩余的两个字符
all_characters = digits + uppercase_letters + lowercase_letters + punctuation
for _ in range(2):
    random_string.append(random.choice(all_characters))
# 打乱顺序以确保随机性
random.shuffle(random_string)
# 将列表转换为字符串
random_string = ''.join(random_string)
# 显示生成的随机字符串
print(f"生成的6位随机字符串是: {random_string}")
  • 四类字符 各来一个
  • 剩下两个 随机得到
  • 然后让顺序 随机
  • 可以让 随机结果 固定下来 吗?

事无绝对

  • 如果上限和下限 被钳位(clamp)

  • 那么随机数
  • 也就 被 钳成
  • 固定数值 了

  • 如果下限高于上限呢?

胡乱尝试

  • 程序报错

  • ValueError
  • 空的范围
  • 对于randrange函数
  • 去找找
  • 这个 报错信息

搜索

  • 在/usr/lib/python3.8/random.py
  • 反向搜索
  • /empty range for randrange

  • 真的找到了抛出异常的位置

位置

  • 按n查找下一个匹配
  • 可以找到具体报错的位置 226 行

  • 天哪 😱
  • 随机也是有章可循的
  • 随机数 也是 算法计算得到的结果

  • 也就是说
  • 随机 也是 可控 的?! 😱

幸运大转盘

  • 物理世界 中的随机
  • 认为是真随机
  • 上帝扔骰子
  • 存在薛定谔的猫

  • 但可能 在概率上 动心思
  • 盲盒
  • 大乐透

对比

  • 虚拟世界的随机
  • ssr
  • 抽卡

  • 除了算法本身的 控制之外
  • 随机函数 本身 也是可以 被控制的
  • 不存在 真随机
  • ai怎么看呢?

计算机中的随机

总结

  • 这次输出了
  • 随机数字 密码

  • 这下知道
  • 平时收到的验证码
  • 怎么来的了

  • 计算机中 没有所谓的 真·随机
  • 一般都是 依靠时间为变量 得到的 随机
相关文章
|
5月前
|
机器学习/深度学习 数据采集 API
Python自动化解决滑块验证码的最佳实践
Python自动化解决滑块验证码的最佳实践
|
5月前
|
数据采集 监控 数据安全/隐私保护
Python正则表达式:用"模式密码"解锁复杂字符串
正则表达式是处理字符串的强大工具,本文以Python的`re`模块为核心,详细解析其原理与应用。从基础语法如字符类、量词到进阶技巧如贪婪匹配与预定义字符集,结合日志分析、数据清洗及网络爬虫等实战场景,展示正则表达式的强大功能。同时探讨性能优化策略(如预编译)和常见错误解决方案,帮助开发者高效掌握这一“瑞士军刀”。最后提醒,合理使用正则表达式,避免过度复杂化,追求简洁优雅的代码风格。
141 0
|
5月前
|
人工智能 Python
[oeasy]python082_变量部分总结_variable_summary
本文介绍了变量的定义、声明、赋值及删除操作,以及Python中的命名规则和常见数据类型。通过示例讲解了字符串与整型的基本用法、类型转换方法和加法运算的区别。此外,还涉及异常处理(try-except)、模块导入(如math和random)及随机数生成等内容。最后总结了实验要点,包括捕获异常、进制转化、变量类型及其相互转换,并简述了编程中AI辅助的应用策略,强调明确目标、分步实施和逐步巩固的重要性。更多资源可在蓝桥、GitHub和Gitee获取。
230 97
|
5月前
|
人工智能 Python
[oeasy]python089_列表_删除列表项_remove_列表长度_len
本文介绍了Python列表(list)的操作方法,重点讲解了`remove`方法的使用。通过实例演示如何删除列表中的元素,探讨了`ValueError`异常产生的原因,并分析了时间复杂度O(n)的概念。同时提及了`clear`方法清空列表的功能及`len`函数获取列表长度的用法。最后以购物清单为例,展示列表的实际应用场景,并预告快速生成列表的方法将在后续内容中介绍。
185 62
|
4月前
|
存储 索引 Python
[oeasy]python093_find方法_指数为负数_index_实际效果
本文介绍了Python中`find`方法与索引(index)的使用,包括负数索引的实际效果。回顾了`eval`函数的应用,并强调类名如`str`、`int`、`list`不可用作变量名以避免覆盖。通过示例解析了负数索引在字符串和列表中的作用,以及`index`方法的三个参数(value、start、stop)的用法。同时对比了`index`和`find`方法的区别:`index`找不到子串时抛出`ValueError`,而`find`返回-1。最后总结了正负索引的使用场景及两者的特性,提供了相关学习资源链接。
349 8
|
5月前
|
人工智能 索引 Python
[oeasy]python091_列表_索引_index_中括号_索引函数
本文介绍了Python中列表与字符串的索引及index函数用法。通过range生成列表,使用索引[]访问和修改列表元素,index函数查找元素位置。字符串支持索引访问但不可直接修改。还探讨了16进制数在Python中的表示方法,以及日期、月份等特殊字符的Unicode范围。最后总结了列表与字符串操作的区别,并预告后续内容,提供蓝桥云课、GitHub和Gitee链接供进一步学习。
116 20
|
6月前
|
人工智能 Java 数据安全/隐私保护
[oeasy]python081_ai编程最佳实践_ai辅助编程_提出要求_解决问题
本文介绍了如何利用AI辅助编程解决实际问题,以猫屎咖啡的购买为例,逐步实现将购买斤数换算成人民币金额的功能。文章强调了与AI协作时的三个要点:1) 去除无关信息,聚焦目标;2) 将复杂任务拆解为小步骤,逐步完成;3) 巩固已有成果后再推进。最终代码实现了输入验证、单位转换和价格计算,并保留两位小数。总结指出,在AI时代,人类负责明确目标、拆分任务和确认结果,AI则负责生成代码、解释含义和提供优化建议,编程不会被取代,而是会更广泛地融入各领域。
187 28
|
5月前
|
Python 容器
[oeasy]python090_列表_构造_范围_range_start_end_step_步长
本文介绍了Python中列表的生成方法,重点讲解了`range()`函数的使用。通过`range(start, stop, step)`可生成一系列整数,支持正负步长,但不支持小数参数。文章从基础的列表追加、直接赋值到复杂的应用场景(如生成等宽字体的月份列表),结合实例演示了`range()`的灵活性与实用性。最后总结了`range()`的关键特性:前闭后开、支持负数步长,并提供了进一步学习的资源链接。
155 14
|
5月前
|
Python
[oeasy]python086方法_method_函数_function_区别
本文详细解析了Python中方法(method)与函数(function)的区别。通过回顾列表操作如`append`,以及随机模块的使用,介绍了方法作为类的成员需要通过实例调用的特点。对比内建函数如`print`和`input`,它们无需对象即可直接调用。总结指出方法需基于对象调用且包含`self`参数,而函数独立存在无需`self`。最后提供了学习资源链接,方便进一步探索。
112 17
|
5月前
|
索引 Python
[oeasy]python092_eval_衡量_转化为列表
本文探讨了 Python 中 `eval` 函数的用法及其与字符串和列表之间的转换关系。通过实例分析,展示了如何使用 `eval` 将字符串转化为对应的数据类型,例如将表示列表的字符串转回列表。同时,文章深入讲解了 `eval` 的工作机制,包括根据本地和全局变量对字符串进行计算的能力。此外,还提醒了命名变量时需避免覆盖内置类名(如 `str`、`int`、`list`)的重要性,以免影响程序正常运行。最后,简要提及字符串和列表索引中负数的应用,并为读者提供了进一步学习的资源链接。
115 2

推荐镜像

更多