目录
1.温度格式转换
温度的刻画有两个不同体系:摄氏度(Celsius)和华氏度(Fahrenheit)。
将用户输入华氏度转换为摄氏度,或将输入的摄氏度转换为华氏度。
转换算法如下:(C表示摄氏度、F表示华氏度)
C = ( F - 32 ) / 1.8
F = C * 1.8 + 32
要求如下:
(1) 输入输出的摄氏度可采用大小写字母C结尾,温度可以是整数或小数,如:12.34C指摄氏度12.34度;
(2) 输入输出的华氏度可采用大小写字母F结尾,温度可以是整数或小数,如:87.65F指华氏度87.65度;
(3) 输出保留小数点后两位,输入格式错误时,输出提示:输入格式错误;
temp=input()
if temp[-1] in ['c','C']:
newtemp=eval(temp[0:-1])*1.8+32
print("{:.2f}F".format(newtemp))
elif temp[-1] in ['f','F']:
newtemp=(eval(temp[0:-1])-32)/1.8
print("{:.2f}C".format(newtemp))
else:
print("输入格式错误")
2.温度转换
(1) 输入输出的摄氏度采用大写字母C开头,温度可以是整数或小数,如:C12.34指摄氏度12.34度;
(2) 输入输出的华氏度采用大写字母F开头,温度可以是整数或小数,如:F87.65指华氏度87.65度;
(3) 不考虑异常输入的问题,输出保留小数点后两位;
temp=input()
if temp[0]=='C':
newtemp=eval(temp[1:])*1.8+32
print("F{:.2f}".format(newtemp))
else:
newtemp=(eval(temp[1:])-32)/1.8
print("C{:.2f}".format(newtemp))
3.数字形式转换
获得用户输入的一个正整数输入,输出该数字对应的中文字符表示。
0到9对应的中文字符分别是:零一二三四五六七八九
s=input()
lst='零一二三四五六七八九十'
for i in s:
print(lst[eval(i)],end="")
4.货币转换
人民币和美元是世界上通用的两种货币之一,写一个程序进行货币间币值转换,其中:
人民币和美元间汇率固定为:1美元 = 6.78人民币。
程序可以接受人民币或美元输入,转换为美元或人民币输出。人民币采用RMB表示,美元USD表示,符号和数值之间没有空格。
注意:
(1) 这是一个OJ题目,获得输入请使用input() ;
(2) 不提示输出格式错误,结果小数点后保留两位。
s=input()
if s[0:3]=='RMB':
ns=eval(s[3:])/6.78
print("USD{:.2f}".format(ns))
else:
ns=eval(s[3:])*6.78
print("RMB{:.2f}".format(ns))
5.Hello World的条件输出
获得用户输入的一个整数,参考该整数值,打印输出"Hello World",要求:
如果输入值是0,直接输出"Hello World"
如果输入值大于0,以两个字符一行方式输出"Hello World"(空格也是字符)
如果输入值小于0,以垂直方式输出"Hello World"
s=input()
if eval(s)==0:
print("Hello World")
elif eval(s)>0:
for i in range(0,len("Hello World")+1,2):
print("Hello World"[i:i+2])
else:
for i in "Hello World":
print(i)
6.数值运算
获得用户输入的一个字符串,格式如下:
M OP N
其中,M和N是任何数字,OP代表一种操作,表示为如下四种:+, -, *, /(加减乘除)
根据OP,输出M OP N的运算结果,统一保存小数点后2位。
注意:M和OP、OP和N之间可以存在多个空格,不考虑输入错误情况。
s=input()
print("{:.2f}".format(eval(s)))
7.天天向上的力量
这是"实例"题,与课上讲解实例相同,请作答检验学习效果。
工作日模式要努力到什么水平,才能与每天努力1%一样?
-A君: 一年365天,每天进步1%,不停歇
-B君: 一年365天,每周工作5天休息2天,休息日下降1% ,要多努力呢?
每周工作5天休息2天,计算工作日的努力参数是多少才能与每天努力1%一样。
要求如下:
(1) 一年365天,以第0天的能力值为基数,记为1.0;
(2) 当好好学习时,能力值相比前一天提高1%;当没有学习时,由于遗忘等原因能力值相比前一天下降1%;
def dayUp(df):
dayup=1
for i in range(365):
if i%7 in [6,0]:
dayup=dayup*(1-0.01)
else:
dayup=dayup*(1+df)
return dayup
dayfactor=0.01
dayupa=1
for i in range(365):
dayupa*=(1+dayfactor)
while dayupa>dayUp(dayfactor):
dayfactor+=0.001
print("工作日的努力参数是: {:.3f}".format(dayfactor))
8.三次方格式化
获得用户输入的一个数字,可能是整数或浮点数,a,计算a的三次方值,并打印输出。
输出结果采用宽度20个字符、居中输出、多余字符采用减号(-)填充。
如果结果超过20个字符,则以结果宽度为准。
print("{:-^20}".format(eval(input())**3))
9.星号三角形
读入一个整数N,N是奇数,输出由星号字符组成的等边三角形,要求:
第1行1个星号,第2行3个星号,第3行5个星号,依次类推,最后一行共N的星号。
n=eval(input())
for i in range(1,n+1,2):
print("{}".format("*"*i).center(n," "))
10.恺撒密码
恺撒密码是古罗马恺撒大帝用来对军事情报进行加解密的算法,它采用了替换方法对信息中的每一个英文字符循环替换为字母表序列中该字符后面的第三个字符,即,字母表的对应关系如下:
原文: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()获得输入。
s=input()
for i in s:
if 'a'<=i<='z':
print(chr((ord(i)-ord('a')+3)%26+ord('a')),end="")
elif 'A'<=i<='Z':
print(chr(((ord(i)-ord('A'))+3)%26+ord('A')),end="")
else:
print(i,end="")
11.平方根格式化
获得用户输入的一个整数a,计算a的平方根,保留小数点后3位,并打印输出。
输出结果采用宽度30个字符、右对齐输出、多余字符采用加号(+)填充。
如果结果超过30个字符,则以结果宽度为准。
n=eval(input())
print("{:+>30.3f}".format(pow(n,0.5)))
12.字符串分段组合
获得输入的一个字符串s,以字符减号(-)分割s,将其中首尾两段用加号(+)组合后输出。
s=input().split("-")
print(s[0]+"+"+s[-1])
13.身体质量指数BMI
BMI :Body Mass Index 国际上常用的衡量人体肥胖和健康程度重要标准,主要用于统计分析
定义:BMI = 体重 (kg) /身高2(m2)
获取用户输入的体重和身高值,计算并给出国际和国内的 BMI 分类
要求如下:
(1) 混合计算并给出国际和国内的 BMI 分类;
(2) 使用input()获得测试用例输入时,不要增加提示字符串。
height,weight=eval(input())
bmi=weight/pow(height,2)
print("BMI数值为:{:.2f}".format(bmi))
who,nat="",""
if bmi<18.5:
who,nat="偏瘦","偏瘦"
elif 18.5<=bmi<24:
who,nat="正常","正常"
elif 24<=bmi<25:
who,nat="正常","偏胖"
elif 25<=bmi<28:
who,nat="偏胖","偏胖"
elif 28<=bmi<30:
who,nat="偏胖","肥胖"
else:
who,nat="肥胖","肥胖"
print("BMI指标为:国际'{}',国内'{}'".format(who,nat))
14.圆周率的计算
求解圆周率可以采用蒙特卡罗方法,在一个正方形中撒点,根据在1/4圆内点的数量占总撒点数的比例计算圆周率值。
请以123作为随机数种子,获得用户输入的撒点数量,编写程序输出圆周率的值,保留小数点后6位。
import random
DARTS=eval(input())
hits=0.0
random.seed(123)
for i in range(1,DARTS+1):
x,y=random.random(),random.random()
dist=pow(x**2+y**2,0.5)
if dist<=1.0:
hits=hits+1
pi=4*(hits/DARTS)
print("{:.6f}".format(pi))
15.整数的加减和
编写程序计算如下数列的值:
1-2+3-4...966
其中,所有数字为整数,从1开始递增,奇数为正,偶数为负
s="1"
for i in range(2,967):
if i%2:
s+=("+"+str(i))
else:
s+=("-"+str(i))
print(eval(s))
16.三位水仙花数
"水仙花数"是指一个三位整数,其各位数字的3次方和等于该数本身。
例如:ABC是一个"3位水仙花数",则:A的3次方+B的3次方+C的3次方 = ABC。
请按照从小到大的顺序输出所有的3位水仙花数,请用"逗号"分隔输出结果。
s=""
for i in range(100,1000):
a,b,c=str(i)[0],str(i)[1],str(i)[2]
if pow(eval(a),3)+pow(eval(b),3)+pow(eval(c),3)==i:
s+=str(i)+","
print(s.strip(","))
17.用户登录的三次机会
给用户三次输入用户名和密码的机会,要求如下:
1)如输入第一行输入用户名为‘Kate’,第二行输入密码为‘666666’,输出‘登录成功!’,退出程序;
2)当一共有3次输入用户名或密码不正确输出“3次用户名或者密码均有误!退出程序。”。
n=0
for i in range(3):
s1=input()
s2=input()
if s1=='Kate' and s2=='666666':
print("登录成功!")
break
else:
n+=1
if n==3:
print("3次用户名或者密码均有误!退出程序。")
18.四位玫瑰数
四位玫瑰数是4位数的自幂数。自幂数是指一个 n 位数,它的每个位上的数字的 n 次幂之和等于它本身。
例如:当n为3时,有1^3 + 5^3 + 3^3 = 153,153即是n为3时的一个自幂数,3位数的自幂数被称为水仙花数。
请输出所有4位数的四位玫瑰数,按照从小到大顺序,每个数字一行。
for i in range(1000,10000):
a,b,c,d=str(i)[0],str(i)[1],str(i)[2],str(i)[3]
if pow(eval(a),4)+pow(eval(b),4)+pow(eval(c),4)+pow(eval(d),4)==i:
print(i)
19.100以内素数之和
求100以内所有素数之和并输出。
素数指从大于1,且仅能被1和自己整除的整数。
提示:可以逐一判断100以内每个数是否为素数,然后求和。
s=0
for i in range(2,101):
if i==2 or i==3:
s+=i
else:
for j in range(2,i//2+1):
if i%j==0:
break
else:
s+=i
print(s)
20.用七段数码管绘制当前系统时间
七段数码管是一种展示数字的有效方式。
请用程序绘制当前系统时间对应的七段数码管,要求如下:
(1) 使用 time 库获得系统当前时间,格式如下:20190411
(2) 绘制对应的七段数码管
(3) 数码管风格不限
import turtle,time
def drawGap():
turtle.penup()
turtle.fd(5)
def drawLine(draw):
drawGap()
turtle.pendown() if draw else turtle.penup()
turtle.fd(40)
drawGap()
turtle.right(90)
def drawDigit(digit):
drawLine(True) if digit in [2,3,4,5,6,8,9] else drawLine(False)
drawLine(True) if digit in [0,1,3,4,5,6,7,8,9] else drawLine(False)
drawLine(True) if digit in [0,2,3,5,6,8,9] else drawLine(False)
drawLine(True) if digit in [0,2,6,8] else drawLine(False)
turtle.left(90)
drawLine(True) if digit in [0,4,5,6,8,9] else drawLine(False)
drawLine(True) if digit in [0,2,3,5,6,7,8,9] else drawLine(False)
drawLine(True) if digit in [0,1,2,3,4,7,8,9] else drawLine(False)
turtle.left(180)
turtle.penup()
turtle.fd(20)
def drawDate(date):
turtle.pencolor("red")
for i in date:
drawDigit(eval(i))
def main():
turtle.setup(800,350,200,200)
turtle.penup()
turtle.fd(-300)
turtle.pensize(5)
drawDate(time.strftime("%Y%m%d",time.gmtime()))
turtle.hideturtle()
turtle.done()
main()
21.科赫雪花小包裹
完成功能:获得用户输入的整数N,作为阶,绘制N阶科赫曲线。
import turtle
def koch(size, n):
if n==0:
turtle.fd(size)
else:
for angle in [0,60,-120,60]:
turtle.left(angle)
koch(size/3,n-1)
def main(level):
turtle.setup(600, 600)
turtle.penup()
turtle.goto(-200, 100)
turtle.pendown()
turtle.pensize(2)
koch(400,level)
turtle.done()
try:
level = eval(input("请输入科赫曲线的阶: "))
main(level)
except:
print("输入错误")
22.任意累积
计算任意个输入数字的乘积
def cmul(*s):
t=1
for i in s:
t*=i
return t
print(eval("cmul({})".format(input())))
23.斐波那契数列计算
计算斐波那契数列的值,具体功能如下:
-
获取用户输入整数N,其中,N为正整数
-
计算斐波那契数列的值
如果将斐波那契数列表示为fbi(N),对于整数N,值如下:
fbi(1)和fbi(2)的值是1,当N>2时,fbi(N) = fbi(N-1) + fbi(N-2)
请采用递归方式编写。
def fbi(n):
if n==1 or n==2:
return 1
else:
return fbi(n-1)+fbi(n-2)
n = eval(input())
print(fbi(n))
24.汉诺塔实践
有三个圆柱A、B、C,初始时A上有N个圆盘,N由用户输入给出,最终移动到圆柱C上。
每次移动步骤的表达方式示例如下:[STEP 10] A->C。其中,STEP是步骤序号,宽度为4个字符,右对齐。
请编写代码,获得输入N后,输出汉诺塔移动的步骤。
输出格式:每个步骤一行,每行参考格式如下:[STEP 10] A->C
steps = 0
def hanoi(src, des, mid, n):
global steps
if n == 1:
steps+=1
print("[STEP{:>4}] {}->{}".format(steps, src, des))
else:
hanoi(src,mid,des,n-1)
steps+=1
print("[STEP{:>4}] {}->{}".format(steps, src, des))
hanoi(mid,des,src,n-1)
N = eval(input())
hanoi("A", "C", "B", N)
25.随机密码生成
以整数17为随机数种子,获取用户输入整数N为长度,产生3个长度为N位的密码,密码的每位是一个数字。每个密码单独一行输出。
产生密码采用random.randint()函数。
import random
def genpwd(length):
return "{}".format(random.randint(pow(10,length-1),pow(10,length)-1))
length = eval(input())
random.seed(17)
for i in range(3):
print(genpwd(length))
26.连续质数计算
获得用户输入数字N,计算并输出从N开始的5个质数,单行输出,质数间用逗号,分割。
注意:需要考虑用户输入的数字N可能是浮点数,应对输入取整数;最后一个输出后不用逗号。
def prime(m):
for i in range(2,m):
if m%i==0:
return False
return True
n = eval(input())
count=0
if n!=int(n):
n=int(n)+1
while count<5:
if prime(n):
count+=1
if count==5:
print(n,end="")
else:
print(n,end=",")
n+=1