Python 小型项目大全 6~10

Posted 布客飞龙

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python 小型项目大全 6~10相关的知识,希望对你有一定的参考价值。

六、凯撒密码

原文:http://inventwithpython.com/bigbookpython/project6.html

凯撒密码是朱利叶斯·凯撒使用的一种古老的加密算法。它通过将字母在字母表中移动一定的位置来加密字母。我们称移位的长度为密钥。比如,如果密钥是 3,那么A变成DB变成EC变成F,以此类推。要解密信息,你必须将加密的字母向相反的方向移动。这个程序让用户根据这个算法加密和解密信息。

在现代,凯撒密码不是很复杂,但这使它成为初学者的理想选择。Project 7 中的程序“凯撒破解”可以暴力破解所有 26 个可能的密钥来解密消息,即使你不知道原始密钥。此外,如果您使用密钥 13 对消息进行加密,凯撒密码将与项目 61 的“ROT 13 密码”相同。在en.wikipedia.org/wiki/Caesar_cipher了解更多关于凯撒密码的信息。如果你想学习一般的密码和密码破解,你可以阅读我的书《Python 密码破解指南》(NoStarch 出版社,2018)。

运行示例

当您运行caesarcipher.py时,输出将如下所示:

Caesar Cipher, by Al Sweigart email@protected
Do you want to (e)ncrypt or (d)ecrypt?
> e
Please enter the key (0 to 25) to use.
> 4
Enter the message to encrypt.
> Meet me by the rose bushes tonight.
QIIX QI FC XLI VSWI FYWLIW XSRMKLX.
Full encrypted text copied to clipboard.

Caesar Cipher, by Al Sweigart email@protected
Do you want to (e)ncrypt or (d)ecrypt?
> d
Please enter the key (0 to 26) to use.
> 4
Enter the message to decrypt.
> QIIX QI FC XLI VSWI FYWLIW XSRMKLX.
MEET ME BY THE ROSE BUSHES TONIGHT.
Full decrypted text copied to clipboard.

工作原理

像大多数密码程序一样,凯撒密码的工作原理是将字符翻译成数字,对这些数字执行一些数学运算,然后将数字翻译回文本字符。在密码的上下文中,我们称这些文本字符为符号。符号可以包括字母、数字和标点符号,每个符号都被赋予一个唯一的整数。在凯撒密码程序的情况下,符号都是字母,它们的整数就是它们在SYMBOLS字符串:'ABCDEFGHIJKLMNOPQRSTUVWXYZ'中的位置。

"""Caesar Cipher, by Al Sweigart email@protected
The Caesar cipher is a shift cipher that uses addition and subtraction
to encrypt and decrypt letters.
More info at: https://en.wikipedia.org/wiki/Caesar_cipher
View this code at https://nostarch.com/big-book-small-python-projects
Tags: short, beginner, cryptography, math"""

try:
   import pyperclip  # pyperclip copies text to the clipboard.
except ImportError:
    pass  # If pyperclip is not installed, do nothing. It's no big deal.

# Every possible symbol that can be encrypted/decrypted:
# (!) You can add numbers and punctuation marks to encrypt those
# symbols as well.
SYMBOLS = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'

print('Caesar Cipher, by Al Sweigart email@protected')
print('The Caesar cipher encrypts letters by shifting them over by a')
print('key number. For example, a key of 2 means the letter A is')
print('encrypted into C, the letter B encrypted into D, and so on.')
print()

# Let the user enter if they are encrypting or decrypting:
while True:  # Keep asking until the user enters e or d.
    print('Do you want to (e)ncrypt or (d)ecrypt?')
    response = input('> ').lower()
    if response.startswith('e'):
        mode = 'encrypt'
        break
    elif response.startswith('d'):
        mode = 'decrypt'
        break
    print('Please enter the letter e or d.')

# Let the user enter the key to use:
while True:  # Keep asking until the user enters a valid key.
    maxKey = len(SYMBOLS) - 1
    print('Please enter the key (0 to ) to use.'.format(maxKey))
    response = input('> ').upper()
    if not response.isdecimal():
        continue

    if 0 <= int(response) < len(SYMBOLS):
        key = int(response)
        break

# Let the user enter the message to encrypt/decrypt:
print('Enter the message to .'.format(mode))
message = input('> ')

# Caesar cipher only works on uppercase letters:
message = message.upper()

# Stores the encrypted/decrypted form of the message:
translated = ''

# Encrypt/decrypt each symbol in the message:
for symbol in message:
    if symbol in SYMBOLS:
        # Get the encrypted (or decrypted) number for this symbol.
        num = SYMBOLS.find(symbol)  # Get the number of the symbol.
        if mode == 'encrypt':
            num = num + key
        elif mode == 'decrypt':
            num = num - key

        # Handle the wrap-around if num is larger than the length of
        # SYMBOLS or less than 0:
        if num >= len(SYMBOLS):
            num = num - len(SYMBOLS)
        elif num < 0:
            num = num + len(SYMBOLS)

        # Add encrypted/decrypted number's symbol to translated:
        translated = translated + SYMBOLS[num]
    else:
        # Just add the symbol without encrypting/decrypting:
        translated = translated + symbol

# Display the encrypted/decrypted string to the screen:
print(translated)

try:
    pyperclip.copy(translated)
    print('Full ed text copied to clipboard.'.format(mode))
except:
    pass  # Do nothing if pyperclip wasn't installed. 

在输入源代码并运行几次之后,尝试对其进行实验性的修改。标有(!)的注释对你可以做的小改变有建议。您可以通过向SYMBOLS字符串添加字符来扩展可加密的符号。

探索程序

试着找出下列问题的答案。尝试对代码进行一些修改,然后重新运行程序,看看这些修改有什么影响。

  1. 如果把第 16 行的SYMBOLS = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'改成SYMBOLS = 'ABC'会怎么样?
  2. 用密钥0加密一条消息会发生什么?
  3. 如果删除或注释掉第 56 行的translated = '',会得到什么错误信息?
  4. 如果删除或注释掉第 45 行的key = int(response),会得到什么错误信息?
  5. 如果把第 76 行的translated = translated + SYMBOLS[num]改成translated = translated + symbol会怎么样?

七、凯撒破解

原文:http://inventwithpython.com/bigbookpython/project7.html

这个程序可以破解来自第六个项目的用凯撒密码加密的信息,即使你不知道密钥。凯撒密码只有 26 个可能的密钥,所以计算机可以很容易地尝试所有可能的解密,并向用户显示结果。在密码学中,我们称这种技术为暴力攻击。如果你想了解更多关于密码和密码破解的知识,你可以阅读我的书《Python 密码破解指南》(NoStarch 出版社,2018)。

运行示例

当您运行caesarhacker.py时,输出将如下所示:

Caesar Cipher Hacker, by Al Sweigart email@protected
Enter the encrypted Caesar cipher message to hack.
> QIIX QI FC XLI VSWI FYWLIW XSRMKLX.
Key #0: QIIX QI FC XLI VSWI FYWLIW XSRMKLX.
Key #1: PHHW PH EB WKH URVH EXVKHV WRQLJKW.
Key #2: OGGV OG DA VJG TQUG DWUJGU VQPKIJV.
Key #3: NFFU NF CZ UIF SPTF CVTIFT UPOJHIU.
Key #4: MEET ME BY THE ROSE BUSHES TONIGHT.
Key #5: LDDS LD AX SGD QNRD ATRGDR SNMHFGS.
Key #6: KCCR KC ZW RFC PMQC ZSQFCQ RMLGEFR.
`--snip--`

工作原理

请注意,这个程序中的第 20 行到第 36 行与凯撒密码程序中的第 55 行到第 78 行几乎相同。黑客程序实现了相同的解密代码,除了它是在一个for循环中实现的,这个循环为每一个可能的密钥运行代码。

不幸的是,黑客程序不够复杂,无法识别何时找到了正确的密钥。它依赖于人来读取输出,并识别哪个解密产生了原始英语(或任何被加密的书面语言)。《Python 密码破解指南》(NoStarch 出版社,2018)详细介绍了如何编写 Python 代码来检测英文消息。

"""Caesar Cipher Hacker, by Al Sweigart email@protected
This programs hacks messages encrypted with the Caesar cipher by doing
a brute force attack against every possible key.
More info at:
https://en.wikipedia.org/wiki/Caesar_cipher#Breaking_the_cipher
This code is available at https://nostarch.com/big-book-small-python-programming
Tags: tiny, beginner, cryptography, math"""

print('Caesar Cipher Hacker, by Al Sweigart email@protected')

# Let the user specify the message to hack:
print('Enter the encrypted Caesar cipher message to hack.')
message = input('> ')

# Every possible symbol that can be encrypted/decrypted:
# (This must match the SYMBOLS used when encrypting the message.)
SYMBOLS = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'

for key in range(len(SYMBOLS)):  # Loop through every possible key.
    translated = ''

    # Decrypt each symbol in the message:
    for symbol in message:
        if symbol in SYMBOLS:
            num = SYMBOLS.find(symbol)  # Get the number of the symbol.
            num = num - key  # Decrypt the number.

            # Handle the wrap-around if num is less than 0:
            if num < 0:
                num = num + len(SYMBOLS)

            # Add decrypted number's symbol to translated:
            translated = translated + SYMBOLS[num]
        else:
            # Just add the symbol without decrypting:
            translated = translated + symbol

    # Display the key being tested, along with its decrypted text:
    print('Key #: '.format(key, translated)) 

在输入源代码并运行几次之后,尝试对其进行实验性的修改。请记住,存储在SYMBOLS变量中的字符串必须与生成加密文本的凯撒密码程序中的SYMBOLS变量相匹配。

探索程序

试着找出下列问题的答案。尝试对代码进行一些修改,然后重新运行程序,看看这些修改有什么影响。

  1. 如果删除或注释掉第 20 行的translated = '',会得到什么错误信息?
  2. 如果把第 33 行的translated = translated + SYMBOLS[num]改成translated = translated + symbol会怎么样?
  3. 如果你在凯撒密码黑客程序中输入一条未加密的信息会发生什么?

八、日历制作器

原文:http://inventwithpython.com/bigbookpython/project8.html

这个程序为你输入的月份和年份生成可打印的月历文本文件。日期和日历在编程中是一个棘手的话题,因为有太多不同的规则来确定一个月中的天数,哪一年是闰年,以及特定日期是星期几。幸运的是,Python 的datetime模块为您处理这些细节。这个程序主要是为月历页面生成多行字符串。

运行示例

当您运行calendarmaker.py时,输出将如下所示:

Calendar Maker, by Al Sweigart email@protected
Enter the year for the calendar:
> 2029
Enter the month for the calendar, 1-12:
> 12
                                  December 2029
...Sunday.....Monday....Tuesday...Wednesday...Thursday....Friday....Saturday..
+----------+----------+----------+----------+----------+----------+----------+
|25        |26        |27        |28        |29        |30        | 1        |
|          |          |          |          |          |          |          |
|          |          |          |          |          |          |          |
|          |          |          |          |          |          |          |
+----------+----------+----------+----------+----------+----------+----------+
| 2        | 3        | 4        | 5        | 6        | 7        | 8        |
|          |          |          |          |          |          |          |
|          |          |          |          |          |          |          |
|          |          |          |          |          |          |          |
+----------+----------+----------+----------+----------+----------+----------+
| 9        |10        |11        |12        |13        |14        |15        |
|          |          |          |          |          |          |          |
|          |          |          |          |          |          |          |
|          |          |          |          |          |          |          |
+----------+----------+----------+----------+----------+----------+----------+
|16        |17        |18        |19        |20        |21        |22        |
|          |          |          |          |          |          |          |
|          |          |          |          |          |          |          |
|          |          |          |          |          |          |          |
+----------+----------+----------+----------+----------+----------+----------+
|23        |24        |25        |26        |27        |28        |29        |
|          |          |          |          |          |          |          |
|          |          |          |          |          |          |          |
|          |          |          |          |          |          |          |
+----------+----------+----------+----------+----------+----------+----------+
|30        |31        | 1        | 2        | 3        | 4        | 5        |
|          |          |          |          |          |          |          |
|          |          |          |          |          |          |          |
|          |          |          |          |          |          |          |
+----------+----------+----------+----------+----------+----------+----------+

Saved to calendar_2029_12.txt

工作原理

注意,getCalendarFor()函数返回给定月份和年份的日历的一个巨大的多行字符串。在这个函数中,calText变量存储这个字符串,这个字符串添加了行、空格和日期。为了跟踪日期,currentDate变量保存了一个datetime.date()对象,通过增加或减少datetime.timedelta()对象将其设置为下一个或上一个日期。你可以通过阅读《Python 自动化指南》的第 17 章来了解 Python 的日期和时间模块,automatetheboringstuff.com/2e/chapter17

"""Calendar Maker, by Al Sweigart email@protected
Create monthly calendars, saved to a text file and fit for printing.
This code is available at https://nostarch.com/big-book-small-python-programming
Tags: short"""

import datetime

# Set up the constants:
DAYS = ('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday',
       'Friday', 'Saturday')
MONTHS = ('January', 'February', 'March', 'April', 'May', 'June', 'July',
         'August', 'September', 'October', 'November', 'December')

print('Calendar Maker, by Al Sweigart email@protected')

while True:  # Loop to get a year from the user.
   print('Enter the year for the calendar:')
   response = input('> ')

   if response.isdecimal() and int(response) > 0:
       year = int(response)
       break

   print('Please enter a numeric year, like 2023.')
   continue

while True:  # Loop to get a month from the user.
   print('Enter the month for the calendar, 1-12:')
   response = input('> ')

   if not response.isdecimal():
       print('Please enter a numeric month, like 3 for March.')
       continue

   month = int(response)
   if 1 <= month <= 12:
       break

   print('Please enter a number from 1 to 12.')


def <

Raspberry Pi详细资料大全

参考技术A

The Raspberry Pi Foundation是英国一个小型的慈善组织,成立的宗旨在于推广科技,而非以销售技术来营利。该基金会过去从来没真的发表过一款产品,因而选择了两家全球渠道商e络盟和RS Components为其处理首批Raspberry Pi订单。面对的是业余爱好者和热心DIY 的科技迷,Raspberry Pi销售非常不错。

Raspberry Pi是一款针对电脑业余爱好者、教师、小学生以及小型企业等用户的迷你电脑,预装Linux系统,体积仅信用卡大小,搭载ARM架构处理器,运算性能和智慧型手机相仿。

在接口方面,Raspberry Pi提供了可供键鼠使用的USB接口,此外还有快速乙太网接口、SD卡扩展接口以及1个HDMI高清视频输出接口,可与显示器或者TV相连。

基本介绍

    中文名 :树莓派 外文名 :Raspberry Pi 全称 :The Raspberry Pi Foundation 宗旨 :推广科技 订单 :Raspberry Pi
历史发展,版本配置,配件模组,相关图书,最新资讯,销量情况,国内渠道,社会评价,

历史发展

在查raspberry pi B版针脚定义的时候发现了r-pi短短的一年时间已经经历了4代了,下面就把我蒐集的几个版本图片分享给大家,简单说说各个版本的差别。 模型图 最早诞生时,测试版的raspberry pi诞生于英国 伦敦国王大学 King’s College London 简称KCL 该学校有完善的电子开发环境,包括自己印制电路板,所以在最初版的raspberry pi在树莓派Logo左侧有该电路板的编号 KCL-8-94V-0 ,板子所用零件都是杂七杂八非生产物料提供,最初版的实物照片只在官方论坛的一些内部用户帖子中出现,市面没有流通。 正式面世量产的第一版和它非常相向,基本零件规格使用上没有差别,只是插接件,贴片元件均使用工厂批量生产的规格,用料好,板子脱去了beta版的青涩,变得成熟性感。 正式第一版上市后各大媒体开始疯狂报导,树莓派的队伍也越来越壮大,raspberry pi扛不住全球Geek的摆弄,很早就有了超频的核心出现,直到2012-8-16开始,官方也提供了超频核心,并开放了config.txt用于自定义超频,不过,这是在发布第二版之后才官方开放的。原因就是从官方论坛的反馈来,发现了超频后温度大幅提高,特别是右上角那2个绿色的电阻因此寿命大减,所以官方在第二版中替换了标号”0000″的高性能电阻(感谢网友指正,应该是原本用于限流的电阻发热过大,同时导致u *** 输出电流过小,新版采用0欧的电阻来解决这一问题),解决了这一问题。但是这并没有完,从官方论坛的反馈,以及中开始指明官方在Broadcom BCM2835 晶片中加入了电压检测,在加压超频的时候会失去保修,而的确超频后温度更高了,但cat /proc/cpuinfo中的Revision参数可能由2,3变为1,论坛的反馈也证实了这一点。 其实早在第一版获得了成功后,官方已经着手开发REV 2.0全改版,解决一些设计之初没考虑到的问题,并为方便安装,方便扩展提供更好支持,代价就是大幅改版使得一批老的针脚接口配件需要按照新的针脚定义重新编码。这次的改版时官方意义上的2.0,是真正的升级版。 ①两个螺丝孔 ②更改了GPIO部分引脚的定义…… ③纠正一处丝印:旧版“10M”,其实应为“100M” ④增加两个RESET插针,可以连一个重启按钮。 引用的是论坛一个朋友的总结,很多人认为这只是一个除bug版,但我认为这个版本奠定了后续版本的基础,因为第一版的成功,官方决定生产搬迁至英国,可想而知 *** 也是支持的,在发烧友以及官方的双方努力下,raspberry pi项目必定会长久下去,也许就是另一个palm公司诞生了。那么这次的REV 2.0改版,官方一定会考虑更多今后的事情,也许新的高性能版已经在alpha之中了,但一定会以这个REV 2.0为基础,实现平滑升级。 所以,国内用户手里多半是第一版,超频做好散热,不用担心失去保修的问题,而近阶段2.0新版子也逐渐进入国内,可能出现第二版和新版Rev 2.0混杂的情况,不过非特殊需要完全不用考虑区别,因为做工质量都非常好,温度不用考虑,超频适量即可不要加额外电压。如果真想要新版Rev 2.0的,最好再等等,等商家消耗完老版本的库存再入手吧。

版本配置

根据公司的计画,Raspberry Pi 有两种模型,A 版 25 美元,B 版 35 美元。其不同之处在于第二个版本多了一些功能,比如乙太网接口以及USB接口。下面我们来看下这两个版本的配置区别: Raspberry Pi发布了Model B的升级版Model B+,Model B+也被视为第一代Raspberry Pi的"终极进化"版。最佳化后的Model B+新增了两个USB2.0接口,一个SD读卡器和14个GPIO引脚。而为了实现这些新功能,Model B+也不得不在原版的设计上做出一些"牺牲":比如一个看似整洁却可能不太适套用户需求的布局,以及不再支持Wolfson音频卡而将视频和音频连线埠合为一体。虽然有了新变化,但Raspberry Pi承诺将保持英美两国的市场价格一致,并且会为喜欢旧版本的用户继续生产Model B。 硬体方面,Model B+仍然是512MB RAM,主要变化如下:
    更多USB接口:增加了两个USB接口,拥有更好地热插拔支持 更多GPIO接口 SD卡变成了Micro SD卡,并且也不突出来了 将视频输出和耳机输出集成在一起 将电源输入从SD卡一侧移到了HDMI一侧 大大减少了电力消耗(0.5W~1.0W左右)
Raspberry Pi升级版Model B+发布不久又新推出了Model A+版本。 RPi A+版本,既是ModelA的增强版,也是Model B+的精简版。相比Model A,主要有以下几方面的最佳化:
    更多扩展接口:
    和B+一样,现在扩展接口增加到了40pin,前26个定义仍然和以前一样,这就意味着你以前购置 的扩展板仍旧可以无缝使用。 Micro SD接口:
    使用MicroSD卡槽,以前大的SD卡槽被替换成了现下的MicroSD卡槽 更好的音质:
    音频电路采用了更好的低噪声电源 更小的尺寸:相比树莓派其他型号,尺寸更小,更薄

配件模组

摄像头模组 模组的设定“sudo raspi-config” 选择“ 树莓派摄像头 Camera(摄像头)”并启用。模组的使用,安装raspistill、raspivid和raspistillyuv 3个套用。使用命令行控制。拍摄一张照片“raspistill -o image.jpg”,拍摄视频“raspivid -o video.h264 -t 10000” 基于Scratch软体的PicoBoard感测器互动创新板 7寸高清树莓派液晶显示器 2.4G无线手持式触摸板键鼠一体机 Raspberry Pi专用5V/2A开关电源适配器 HDMI转VGA 视频接口转换器 Raspberry Pi 晶片纯铜散热片 通用AV视频数据线 金士顿预设系统SD存储卡 Raspberry Pi TF卡转SD卡座 可拼接Raspberry Pi 亚克力透明外壳 密封式进口Raspberry Pi透明外壳 安普(AMP)超五类网线

相关图书

爱上Raspberry Pi:Matt Richardson / Shawn Wallace著;李凡希译,科学出版社(2013-10出版) Raspberry Pi快速入门指南:Maik Schmidt著;王峰、王江伟、王汝波译,科学出版社(2014-01出版) Raspberry Pi Python 编程入门 :Simon Monk 著;姜斐祚 译,科学出版社(2014-02-01出版) 树莓派套用速成 网路套用秘方:(美)Rick Golden 著;符鹏飞 译,科学出版社(2014-5-1出版) 树莓派套用速成 Raspbmc媒体中心 :(美)Rick Golden 著;符鹏飞 译,科学出版社(2014-5-1出版)

最新资讯

据国外媒体报导,一家位于英国剑桥的咨询公司PA Consulting成功利用开源硬体Raspberry Pi个人电脑以及配套的软体,成功地模拟移动信号基站,并实现了所有移动信号基站的功能,然后“运营”了独一无二的专署行动网路。一个卡片大小的Raspberry Pi再加上一台砖头大小的信号传送接收器,就可以模拟甚至取代几十米高的信号塔。 在512M B的版本出来后,又做了一些改进。版本其中排线去掉了,用户可以另外订购。通常Video接口也不是黑色,变成黄色与蓝色。此信息请参考最近的树莓官网图片。 另外还有一种蓝色印刷的版本,用于1周年发行纪念。 国内的正式发行版本为红色版本,红色版本不允许印刷ce,f字样。出厂不含税价格约为238,国内批发价约为278,在淘宝上买大约278到328之间。具信息请参考ickey的网。

销量情况

Raspberry Pi这款产品自2012年2月份开始发售以来,至今销量已经突破100万台。 该项目基金会在其部落格上称位于英国的Raspberry Pi制造工厂每周能够生产4万台设备,但这依然不能满足全球的需求,截止2012年8月份Raspberry Pi的出货量就已经突破了50万台。为此Raspberry Pi基金会表示未来将会比如中国等更多国家寻求合作,以帮助缓解供需紧张的情况。截止到2013年10月份最后一周Raspberry Pi总计销量200万台。

国内渠道

1、ICkey-国内官方授权代理商 2、e络盟-树莓派官方主要合作分销商 3、RS-树莓派官方主要合作分销商 4、EGOMAN于2013年2月1日成为Raspberry Pi 中国区代理商商之一,自主生产和销售树莓派(颜色为红色,产品技术规格完全一致)

社会评价

Raspberry Pi的最大特点莫过于价格便宜,仅35美元的Raspberry Pi非常适合教育领域。高级产品经理尼克·威廉士(Nick Williams)说:“自从Raspberry Pi发布以来,我们的销售团队就一直在试图说服学校的IT设施部门接受Raspberry Pi,但是我们做的还不够,我们还有很大的上升空间”。

以上是关于Python 小型项目大全 6~10的主要内容,如果未能解决你的问题,请参考以下文章

Python权威指南的10个项目(1~5)

Python之Matplotlib库常用函数大全(含注释)

python矩阵运算操作大全(非常全)!

Python基础阶段:字符串数据类型操作大全

使用 python 3.6 和 Vmware WorkStation 构建一个小型虚拟局域网通讯程序

python3内置函数大全(顺序排列)