Python语言程序设计--练习
目录
本篇博客只要记录自己在Python学习过程中遇到的一些问题,方便自己复习查阅,也分享一些自己的理解。
题目1:Hello World的条件输出(简单)
题目描述:
获得用户输入的一个整数,参考该整数值,打印输出"Hello World",要求:
如果输入值是0,直接输出"Hello World"
如果输入值大于0,以两个字符一行方式输出"Hello World"(空格也是字符)
如果输入值小于0,以垂直方式输出"Hello World"
输入输出样例:
0
Hello World
参考答案:
n=eval(input())
if n==0:
# TODO: 正常输出Hello World
print('Hello World')
elif n>0:
# TODO: 每行输出两个字符
print('He\nll\n0 \nWo\nrl\nd')
else:
for c in 'Hello World':
print(c)
题目分析:
这个题目主要考察的是输入输出语句、分支语句以及eval()函数的使用,都是很简单的知识点,需要注意的主要有:
1. input()函数: 从控制台获得用户的输入,用户输入的信息以字符串类型保存在<变量>中,其使用格式为:
<变量>=input(<提示信息字符串 >)
>>>str=input("请输入")
>>>str
'8'
切记: input() 函数的输入是以字符串的格式进行保存的,如果输入的是数字,则需要将字符串类型的数字转换成int或者float等其他数据类型,在不知道输入数据类型的情况下,可以用eval()函数直接将输入的字符串型数据直接转换成输入的数据类型。
2.eval()函数: 具有去掉参数最外侧的引号并执行余下语句的功能,其基本使用格式为:
eval(<字符串或字符串变量>)
>>>eval('print("hello")')
hello
因此,可以使用eval()函数将从控制台获得的输入字符串转换成输入的数据格式,不必再次进行强制类型转换。
3.print()函数: 以字符形式向控制台输出结果,需要注意的是,默认输出结束会自动换行,其基本使用格式为:
print(<拟输出的字符串或字符串变量>)
>>>s=["Hello","World"]
>>>for i in range(len(s)):
print(s[i])
Hello
World
字符串类型的一对引号仅在程序内部使用,输出则无引号,具体可参考上面代码块。
print()中增加**end=""**参数表示输出后不增加换行,多个print()可以连续输出。
>>>for i in range(len(s)):
print(s[i],end="")
Hello World
print()函数在输出的时候可以用**format()**对输出的字符串进行格式化:
>>>print("此时的温度是{:.2f}C".format(C))
123.45C
其中,{}表示槽,format()的参数为后续变量,填充到槽中。槽中的 :.2f 表示取小数点后2位。
题目2:数值运算
题目描述:
获得用户输入的一个字符串,格式如下:
M OP N
其中,M和N是任何数字,OP代表一种操作,表示为如下四种:+, -, *, /(加减乘除)
根据OP,输出M OP N的运算结果,统一保存小数点后2位。
注意:M和OP、OP和N之间可以存在多个空格,不考虑输入错误情况。
输入输出示例:
10 + 100 110.00
1 / 20 0.05
参考答案:
s=eval(input())
print('{:.2f}'.format(s))
题目分析:
题目主要考察**eval()函数**和print()输出函数的==格式化==,具体的介绍请参看题目一中的题目分析。
当然,使用eva()函数来处理输入的字符串是最简单的,但是对于未接触eval()函数的初学者来说,典型的做法应该是对输入的字符串进行处理。对于题目1中的注意事项1中大家很容易忽略 input()从控制台获得的输入其实是字符串,需要进行字符串的处理才可以对输入数据继续进行使用,所以在这里再次强调一下。
不使用eval()函数:
s=input()
#对输入的字符传进行处理
op=['+','-','*','/']
for i in range(len(s)):
#查找运算符的位置
if s[i] in op:
list=s.split(s[i])
#找到运算符后,对数据强制类型转换称float型后处理
if s[i]==op[0]:
res=float(list[0])+float(list[1])
elif s[i]==op[1]:
res=float(list[0])-float(list[1])
elif s[i]==op[2]:
res=float(list[0])*float(list[1])
elif s[i]==op[3]:
res=float(list[0])/float(list[1])
print("{:.2f}".format(res))
题目三:凯撒密码加密
题目描述:
恺撒密码是古罗马恺撒大帝用来对军事情报进行加解密的算法,
它采用了替换方法对信息中的每一个英文字符循环替换为字母表
序列中该字符后面的第三个字符,即,字母表的对应关系如下:
原文: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~zA~Z、空格和特殊符号,请编
写一个程序,对输入字符串进行恺撒密码加密,直接输出结果,其中空格不
用进行加密处理。使用input()获得输入。
输入输出示例:
python is good
sbwkrq lv jrrg
参考答案:
pstr=input()
for c in pstr:
if c in "abcdefghijklmnopqrstuvwxyz":
if ord(c)+3>ord('z'):
cstr=ord(c)+3-26
print(chr(cstr), end='')
elif c ==' ':
print(' ',end='')
else:
cstr = ord(c)+3
print(chr(cstr), end='')
elif c in "ABCDEFGHIJKLMNOPQRSTUVWXYZ":
if ord(c)+3>ord('Z'):
cstr=ord(c)+3-26
print(chr(cstr), end='')
elif c ==' ':
print(' ',end='')
else:
cstr = ord(c)+3
print(chr(cstr), end='')
else:
print(c,end='')