python课程单元三编程题讲解(上)
@
下面向大家介绍一下我在学习python课程的一些题目的解法,如果大家有什么更好的解法请私信我。这里只显示题目与代码。
1.快乐的数字
描述:编写一个算法来确定一个数字是否“快乐”。 快乐的数字按照如下方式确定:从一个正整数开始,用其每位数的平方之和取代该数,并重复这个过程,直到最后数字要么收敛等于1且一直等于1,要么将无休止地循环下去且最终不会收敛等于1。能够最终收敛等于1的数就是快乐的数字。
例如: 19 就是一个快乐的数字,计算过程如下:
1^2 + 9^2 = 82
8^2 + 2^2 = 68
6^2 + 8^2 = 100
1^2 + 0^2 + 0^2 = 1
当输入快乐的数字时,输出True,否则输出False。
作者代码:用递归即可。
a = input('')
def num(a):
sum = 0
for i in list(a):
sum += int(i)**2
try:
if sum != 1:
num(str(sum))
else:
print('True')
except:
print('False')
result = num(a)
2.凯撒密码I
描述:凯撒密码是古罗马凯撒大帝用来对军事情报进行加解密的算法,它采用了替换方法对信息中的每一个英文字符循环替换为字母表序列中该字符后面的第三个字符,即,字母表的对应关系如下:
原文:A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
密文:D E F G H I J K L M N O P Q R S T U V W X Y Z A B C
对于原文字符P,其密文字符C满足如下条件:C=(P+3) mod 26
上述是凯撒密码的加密方法,解密方法反之,即:P=(C-3) mod 26
假设用户可能使用的输入仅包含小写字母a~z和空格,请编写一个程序,对输入字符串进行凯撒密码加密,直接输出结果,其中空格不用进行加密处理。使用input()获得输入。
作者代码:根据不同条件判断即可。
my_str = input("")
result = ""
for i in my_str:
if i != my_str[-1] and i not in ['x','y','z']:
result += chr(int(ord(i)) + 3 % 26)
elif i == my_str[-1]:
result += chr(int(ord(i)) + 3 % 26)
elif i in ['x','y','z']:
result += chr(int(ord(i)) - 23)
print(result.replace('#',' '))
3.凯撒密码II
描述:恺撒密码是古罗马凯撒大帝用来对军事情报进行加解密的算法,它采用了替换方法对信息中的每一个英文字符循环替换为字母表序列中该字符后面的第三个字符,即,字母表的对应关系如下:
原文:A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
密文:D E F G H I J K L M N O P Q R S T U V W X Y Z A B C
对于原文字符P,其密文字符C满足如下条件:C = (P+3) mod 26
上述是凯撒密码的加密方法,解密方法反之,即:P = (C-3) mod 26
假设用户可能使用的输入仅包含西文字母,即英文大小写字母azAZ和特殊字符,请编写一个程序,对输入字符串进行凯撒密码加密,直接输出结果,其中特殊字符不进行加密处理。
作者代码:根据是否在ASCII码范围内判断即可。
my_str = input("")
result = ""
for i in my_str:
if i != my_str[-1] and i not in ['x','y','z','X','Y','Z'] and (65 <= int(ord(i)) <= 90 or 97 <= int(ord(i)) <= 122):
result += chr(int(ord(i)) + 3 % 26)
elif i == my_str[-1] and (65 <= int(ord(i)) <= 90 or 97 <= int(ord(i)) <= 122):
result += chr(int(ord(i)) + 3 % 26)
elif i in ['x','y','z','X','Y','Z']:
result += chr(int(ord(i)) - 23)
else:
result += i
print(result.replace('#',' '))
4.括号配对检测 A
描述:用户输入一行字符串,其中可能包括小括号 (),请检查小括号是否配对正确,配对成功与否分别输出:
配对成功,配对不成功
其中,小括号配对要考虑配对顺序,即()表示配对,)(不是配对,只考虑小括号配对。
注意,这是一个OJ题目,获得输入使用input("")。
作者代码:C语言中可以用栈,这里可以不用,用更简单的方法
# 把每一个的右括号的值的位置放进去
def everyRight(right,a):
# 找到该右括号左边的最近左括号的序列号
for j in a:
if j - right < 0:
m = j
return m
my_str = input("")
my_list = list(my_str)
a = [];b = []
for i in range(0,len(my_list)):
if '(' == my_list[i]:
a.append(i)
elif ')' == my_list[i]:
b.append(i)
s1 = [];s2 = []
i = 0
try:
while 1:
# 递归,首先,先找到第一个右括号和第一个左括号,找到后,就去除,然后递归
left = everyRight(b[i],a)
right = b[i]
s1.append(left)
s2.append(right)
# 删除上一次左括号对应的序号,并将下一次的右括号和左括号调用函数
a.pop(left)
everyRight(b[i+1],a)
i = i+1
except:
pass
try:
if len(s1) == len(s2) and len(s1) !=0 and len(a) != 1:
print('配对成功')
else:
print('配对不成功')
except:
print('配对不成功')
但是这种方法有问题,比如遇到下面的输出:
为什么会出现这种情况呢?我们看下如下输出:
这时候就是一种错误就是当遇到了右括号还没有遇到左括号就会停下,我们把列表删去我们除去的值,当到了最后停止时,再根据左右括号个数判断。
代码如下:
# 把每一个的右括号的值的位置放进去
def everyRight(right,a):
# 找到该右括号左边的最近左括号的序列号
for j in a:
if j - right < 0:
m = j
return m
my_str = input("")
my_list = list(my_str)
a = [];b = []
for i in range(0,len(my_list)):
if '(' == my_list[i]:
a.append(i)
elif ')' == my_list[i]:
b.append(i)
s1 = [];s2 = []
i = 0
try:
while 1:
# 递归,首先,先找到第一个右括号和第一个左括号,找到后,就去除,然后递归
left = everyRight(b[i],a)
right = b[i]
s1.append(left)
s2.append(right)
print('right{0}'.format(right))
# 删除上一次左括号对应的序号,并将下一次的右括号和左括号调用函数
a.pop(left)
# 删除列表对应的值
my_list.remove(my_list[left])
my_list.remove(my_list[right])
everyRight(b[i+1],a)
i = i+1
except:
pass
# print(s1)
# print(s2)
# print(a)
# print(len(a))
# print(my_list)
a1 = my_list.index(')')
a2 = my_list.index('(')
try:
if len(s1) == len(s2) and len(s1) !=0 and a2 < a1:
print('配对成功')
else:
print('配对不成功')
except:
print('配对不成功')
但是还是有错误:
但是我们已经接近正确答案了,改进后的完整代码我会下一篇博客讲解。
python课程单元三编程题讲解(上)的更多相关文章
- Python课程第三天作业
一.统计⽂件数据中出现的的所有字符与该字符出现的个数(不区分⼤⼩写,标点与空格也算) ⽂件内容: hello friend, can you speak English! # 结果: { 'h': 1 ...
- python课程第三周重点记录
1.关于set,set是一个无序且不重复的元素集合 s = set(["ss","dd","pp"]) #创建set s1 = set([& ...
- Java程序设计(2021春)——第一章课后题(选择题+编程题)答案与详解
Java程序设计(2021春)--第一章课后题(选择题+编程题)答案与详解 目录 Java程序设计(2021春)--第一章课后题(选择题+编程题)答案与详解 第一章选择题 1.1 Java与面向对象程 ...
- 可爱的 Python : Python中的函数式编程,第三部分
英文原文:Charming Python: Functional programming in Python, Part 3,翻译:开源中国 摘要: 作者David Mertz在其文章<可爱的 ...
- python面试模拟真题讲解
一.选择题(32分) 1.python不支持的数据类型有:(A) A.char B.int C.float D.list 2.x = “foo” y = 2 print(x+y) ...
- C算法编程题(四)上三角
前言 上一篇<C算法编程题(三)画表格> 上几篇说的都是根据要求输出一些字符.图案等,今天就再说一个“上三角”,有点类似于第二篇说的正螺旋,输出的字符少了,但是逻辑稍微复杂了点. 程序描述 ...
- C算法编程题(三)画表格
前言 上一篇<C算法编程题(二)正螺旋> 写东西前还是喜欢吐槽点东西,要不然写的真还没意思,一直的想法是在博客园把自己上学和工作时候整理的东西写出来和大家分享,就像前面写的<T-Sq ...
- python解无忧公主的数学时间编程题001.py
python解无忧公主的数学时间编程题001.py """ python解无忧公主的数学时间编程题001.py http://mp.weixin.qq.com/s?__b ...
- POJ C程序设计进阶 编程题#4:寻找平面上的极大点
编程题#4:寻找平面上的极大点 来源: POJ (Coursera声明:在POJ上完成的习题将不会计入Coursera的最后成绩.) 注意: 总时间限制: 1000ms 内存限制: 65536kB 描 ...
随机推荐
- 3.1 Spark概述
一.Spark简介 1.Spark的特点 特点1:运行速度快(内存计算,循环数据流.有向无环图设计机制) 把所有针对数据集的操作转换成一张有向无环图,整个执行引擎调度都是基于这个有向无环图,对这个有向 ...
- 7. Transformer-XL原理介绍
1. 语言模型 2. Attention Is All You Need(Transformer)算法原理解析 3. ELMo算法原理解析 4. OpenAI GPT算法原理解析 5. BERT算法原 ...
- linux(02)基础shell命令
Linux(02)之shell命令 一,Linux命令行的组成结构 在我们的linux启动,登陆成功之后会显示: 这就是linux的命令行的组成结构 二,常见命令 1,Linux系统命令操作语法格式 ...
- 201871010134-周英杰《面向对象程序设计(java)》第十三周学习总结
201871010134-周英杰<面向对象程序设计(java)>第十三周学习总结 项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ ...
- 柯里化currying + 隐式调用 = 一个有名的add面试题
柯里化 =================================== 维基百科解释: 柯里化,英语:Currying(果然是满满的英译中的既视感),是把接受多个参数的函数变换成接受一个单一参 ...
- Basics of Algorithmic Trading: Concepts and Examples
https://www.investopedia.com/articles/active-trading/101014/basics-algorithmic-trading-concepts-and- ...
- GAN与VAE
经典算法·GAN与VAE Generative Adversarial Networks 及其变体 生成对抗网络是近几年最为经典的生成模型的代表工作,Goodfellow的经典工作.通过两个神经网络结 ...
- 常用shell脚本
[脚本1]打印形状打印等腰三角形.直角三角形.倒直角三角形.菱形 #!/bin/bash # 等腰三角形 read -p "Please input the length: " n ...
- LeetCode 1284. Minimum Number of Flips to Convert Binary Matrix to Zero Matrix (最少翻转次数将二进制矩阵全部置为0)
给一个矩阵mat,每个格子都是0或1,翻转一个格子会将该格子以及相邻的格子(有共同边)全部翻转(0变为1,1变为0) 求问最少需要翻转几次将所有格子全部置为0. 这题的重点是数据范围,比赛结束看了眼数 ...
- mnist数据集探究
一.mnist的属性和方法 为了方便我只检查了后20个属性和方法 from tensorflow.examples.tutorials.mnist import input_data mnist = ...