获得用户输入的一个整数,参考该整数值,打印输出"Hello World",要求:
如果输入值是0,直接输出"Hello World"
如果输入值大于0,以两个字符一行方式输出"Hello World"(空格也是字符)
如果输入值小于0,以垂直方式输出"Hello World"
n = eval(input())
if n == 0:
print("Hello World")
elif n > 0:
print("He\nll\no \nWo\nrl\nd")
#“\n”是“换行”的转义字符,常用在打印多行数据时作为分割标志出现
else:
for c in "Hello World":
#for in是循环结构的一种,经常用于遍历字符串、列表、元组、字典
print(c)
华氏度F与摄氏度C的互相转换:
F= C*1.8 + 32
C=(F-32)/ 1.8
TempStr=input("请输入带有符号的温度值:")
if TempStr[-1] in ['F','f']:
C=(eval(TempStr[0:-1])-32)/1.8
#eval():去掉参数最外侧引号并执行余下语句的函数
print("转换后的温度是{:.2f}C".format(C))
#{:.2f}表示将变量C填充到这个位置时取小数点后两位
elif TempStr[-1] in ['C','c']:
F=1.8*eval(TempStr[0:-1])+32
print("转换后的温度是{:.2f}F".format(F))
else:
print("输入格式错误")
输出:
请输入带有符号的温度值:11C
转换后的温度是51.80F
获得用户输入的一个正整数数字输入,输出该数字对应的中文字符表示。0到9对应的中文字符分别是:零一二三四五六七八九。
a = "零一二三四五六七八九"
s = input()
for c in s:
print(a[eval(c)], end="")
#print()中增加end=""参数表示输出后不增加换行,多个print()可以连续输出。
结果:
890
八九零
人民币和美元是世界上通用的两种货币之一,写一个程序进行货币间币值转换,其中人民币和美元间汇率固定为:1美元 = 6.78人民币。
程序可以接受人民币或美元输入,转换为美元或人民币输出。人民币采用RMB表示,美元USD表示,符号和数值之间没有空格。
注意:
(1) 这是一个OJ题目,获得输入请使用input() ;
(2) 不提示输出格式错误,结果小数点后保留两位。
money=input()
if money[0:3] in ["USD"]:
R=6.78*eval(money[3:])
print("RMB{:.2f}".format(R))
elif money[0:3] in ["RMB"]:
U=1/6.78*eval(money[3:])
print("USD{:.2f}".format(U))
输出:
USD1
RMB6.78
import turtle
turtle.setup(650,350,200,200) #依次设置窗口的宽,高,起始横坐标,起始纵坐标
turtle.penup() #别名为turtle.pu(),表示将画笔抬起,相当于海龟在飞行,此时画笔轨迹不在画布上形成图# 案
turtle.fd(-250)#向前直行-250个像素,默认正东方向为向前
turtle.pendown() #别名turtle.pd(),表示画笔落下
turtle.pensize(25) #别名turtle.width(),设置画笔的宽度,相当于海龟腰围
turtle.pencolor("purple") #设置画笔颜色
'''pencolor(color)的color参数可以有三种形式:
颜色字符串:turtle.pencolor("purplr")
RGB的小数值:turtle.pencolor(0.63,0.13,0.94)
RGB的元组值:turtle.pencolor((0.63,0.13,0.94))'''
turtle.seth(-40) #控制海龟面对的方向,表示将海龟的方向转为绝对坐标系中的-40度方向
'''turtle.left(angle):海龟向左转
turtle.right(angle):海龟向右转
angle:在海龟当前行进方向上旋转的角度'''
for i in range(4):
turtle.circle(40,80)
turtle.circle(-40,80)
'''turtle.circle(r,extent=None) 根据半径r绘制extent角度的弧形
r:默认圆心在海龟左侧r距离的位置
extent:绘制角度,默认是360度整圆'''
turtle.circle(40,80/2)
turtle.fd(40)
turtle.circle(16,180)
turtle.fd(40*2/3)
turtle.done()#使程序运行结束后不会自动退出,需要手工关闭才可退出。
import turtle as t
t.pensize(2)
for i in range(4):
t.fd(150)
t.left(90)
t.done()
import turtle as t
t.pensize(2)
for i in range(6):
t.fd(150)
t.left(60)
t.done()
import turtle as t
t.pen(3)#画笔粗细
t.pencolor("blue")#画笔颜色
t.speed(1)#画笔速度
for i in range(5):
t.forward(100) #绘制各条边
t.right(144)
t.done()
一年365天,每天进步千分之五,累积进步多少?
一年365天,每天退步千分之五,累积剩下多少?
day=0.005
dayup=pow(1+day,365)
daydown=pow(1-day,365)
print("进步:{:.2f},剩下:{:.2f}".format(dayup,daydown))
结果:
进步:6.17,剩下:0.16
一年365天,一周5个工作日,每天进步1%
一年365天,一周2个休息日,每天退步1%
这种工作日的力量,如何呢?
dayup=1
day=0.01
for i in range(365):
if i % 7 in [6,0]:
dayup=dayup*(1-day)
else:
dayup=dayup*(1+day)
print("工作日的力量:{:.2f}".format(dayup))
结果:
工作日的力量:4.63
工作日模式要努力到什么水平,才能与每天努力1%一样?
A君:一年365天,每天进步1%,不停歇
B君: 一年365天,每周工作5天休息2天,休息日下降1%,要多努力呢?
代码:
def dayup(df):#df是个占位符,代表dayfactor的简写
dayup=1 #天天向上的初始值设为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
while dayup(dayfactor)<37.78:
dayfactor+=0.001
print("工作日的努力参数是:{:.3f}".format(dayfactor))
结果:
工作日的努力参数是:0.019
输入一个数字,输出对应的星期几
weekStr = "星期一星期二星期三星期四星期五星期六星期日"
weekId = eval(input("请输入星期数字(1-7):"))
pos=(weekId-1)*3
print(weekStr[pos: pos+3])
结果:
请输入星期数字(1-7):6
星期六
#简单文本进度条
import time
scale=10 #文本进度条的宽度
print("--------执行开始---")
for i in range(scale+1):
a="*"*i #星号被复制的次数
b="."*(scale-i) #剩余进度条
c=(i/scale)*100 #输出百分比
print("{:^3.0f}%[{}->{}]".format(c,a,b))
# ^代表居中;
# 3表示长度,format填充不足3自动填充空格,可指定填充物;
# .0f表示小数点精确度到个位
time.sleep(1)
print("--------执行结束---")
结果:
--------执行开始---
0 %[->..........]
10 %[*->.........]
20 %[**->........]
30 %[***->.......]
40 %[****->......]
50 %[*****->.....]
60 %[******->....]
70 %[*******->...]
80 %[********->..]
90 %[*********->.]
100%[**********->]
--------执行结束---
#刷新:用后打印的字符覆盖之前的字符
#不能换行:print()需要被控制
#要能回退:打印后光标回退到之前的位置 \r
import time
for i in range(101):
print("\r{:3}%".format(i),end="")
time.sleep(1)
import time
scale=50 #文本进度条的宽度
print("执行开始".center(scale//2,"-"))
#center()方法用于将字符串填充到指定长度,并将原始字符串居中输出
#总长度为scale//2,指定填充字符为“-”
start=time.perf_counter()
for i in range(scale+1):
a="*"*i #星号被复制的次数
b="."*(scale-i) #剩余进度条
c=(i/scale)*100 #输出百分比
dur=time.perf_counter()-start #当前打印文本进度条时,消耗的时间
print("\r{:^3.0f}%[{}->{}]{:.2f}s".format(c,a,b,dur),end='')
time.sleep(0.1)
print("\n"+"执行结束".center(scale//2,'-'))
输入一个百分制成绩,输出等级A、B、C、D、E,其中90-100分为A,80-89分为B,70-79分为C,60-69分为D,60分以下为E。
要求:
a=eval(input("请输入成绩:")) #eval() 函数用来执行一个字符串表达式,并返回表达式的值。
if a<0 or a>100 or a%1!=0:
print("您输入的成绩不合理,请重新输入")
elif 90<=a<=100:
print("成绩为A")
elif 80<=a<=89:
print('成绩为B')
elif 70<=a<=79:
print('成绩为C')
elif 60<=a<=69:
print("成绩为D")
else:
print("成绩为E")
运行结果:
请输入成绩:100
成绩为A
请输入成绩:10
成绩为E
请输入成绩:110
您输入的成绩不合理,请重新输入
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指数为:国标'{0}',国内'{1}'".format(who,nat))
结果:
请输入身高(米)和体重(公斤)[逗号隔开]:1.8,75
bmi指数为:23.15
bmi指数为:国标'正常',国内'正常'
法1:圆周率的近似计算公式:
pi=0
N=100 #先设置累加数量为100
for k in range(N):
pi+=1/pow(16,k)*(4/(8*k+1)-2/(8*k+4)-1/(8*k+5)-1/(8*k+6))
print("圆周率的值为:{}".format(pi))
结果:
圆周率的值为:3.141592653589793
法2:蒙特卡罗方法
pi=圆的面积与正方形的面积之比;面积通过向区域内撒点计算而得。
from random import random
from time import perf_counter
darts=1000*1000 #一共撒的点
hits=0.0 #指目前在圆内的点的数量
start=perf_counter() #计时,当前系统时间
for i in range(1,darts+1): #模拟每次撒的点
x,y=random(),random() #返回0-1之间的小数值,表示随机点的坐标
dist=pow(x**2+y**2,0.5) #判断随机点位置是否在圆内
if dist<=1.0: #在圆内
hits+=1
pi=4*(hits/darts)
print("pi=",pi)
print("运行时间为:{:.5f}".format(perf_counter()-start))
结果:
pi= 3.141332
运行时间为:0.82573
步骤1:绘制单个数字对应的数码管
步骤2:获得一串数字,绘制对应的数码管
步骤3:获得当前的系统时间,绘制对应的数码管
程序:
import turtle
def drawline(draw): #绘制一条线
if draw==True:
turtle.pendown()
else:
turtle.penup()
turtle.fd(40)
turtle.right(90)
def drawdight(dight):#根据数字绘制七段数码管(七条线)
drawline(True) if dight in[2,3,4,5,6,8,9] else drawline(False)
drawline(True) if dight in [0,1, 3, 4, 5, 6, 7,8, 9] else drawline(False)
drawline(True) if dight in [0,2, 3, 5, 6, 8, 9] else drawline(False)
drawline(True) if dight in [0,2, 6, 8] else drawline(False)
turtle.left(90)
drawline(True) if dight in [0, 4, 5, 6, 8, 9] else drawline(False)
drawline(True) if dight in [0, 2, 3, 5, 6,7, 8, 9] else drawline(False)
drawline(True) if dight in [0,1, 2, 3,4,7, 8,9] else drawline(False)
turtle.left(180)
turtle.penup() #为绘制后续数字确定位置
turtle.fd(20) #为绘制后续数字确定位置
def drawdate(date): #获得要输出的数字
for i in date:
drawdight(eval(i)) #通过eval将数字变为整数
def main():
turtle.setup(800,350,200,200) #依次设置窗口的宽,高,起始横、纵坐标
turtle.penup()
turtle.fd(-300)
turtle.pensize(5)
turtle.pencolor('blue')
drawdate('20220713')
turtle.hideturtle()
turtle.done()
main()
结果:
对上述程序进行优化,使线段之间留一些空隙;且增加年月日标记:
代码:
mport turtle,time
def drawgap(): #绘制数码管间隔
turtle.penup()
turtle.fd(5)
def drawline(draw): #绘制一条线,即单段数码管
drawgap()
if draw==True:
turtle.pendown()
else:
turtle.penup()
turtle.fd(40)
drawgap()
turtle.right(90)
def drawdight(dight):#根据数字绘制七段数码管(七条线)
drawline(True) if dight in[2,3,4,5,6,8,9] else drawline(False)
drawline(True) if dight in [0,1, 3, 4, 5, 6, 7,8, 9] else drawline(False)
drawline(True) if dight in [0,2, 3, 5, 6, 8, 9] else drawline(False)
drawline(True) if dight in [0,2, 6, 8] else drawline(False)
turtle.left(90)
drawline(True) if dight in [0, 4, 5, 6, 8, 9] else drawline(False)
drawline(True) if dight in [0, 2, 3, 5, 6,7, 8, 9] else drawline(False)
drawline(True) if dight 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:
if i=='-':
turtle.write('年',font=("Arial",18,"normal")) #输出的字符串 字体 大小
turtle.pencolor("green")
turtle.fd(40)
elif i=='=':
turtle.write('月', font=("Arial", 18, "normal"))
elif i=='+':
turtle.write('日', font=("Arial", 18, "normal"))
else:
drawdight(eval(i)) #通过eval将字符串变为数字
def main():
turtle.setup(800,350,200,200) #依次设置窗口的宽,高,起始横坐标,起始纵坐标
turtle.penup()
turtle.fd(-300)
turtle.pensize(5)
drawdate(time.strftime('%Y-%m=%d+',time.gmtime()))
#drawdate('20220713')
turtle.hideturtle() #隐藏画笔的turtle形状
turtle.done()
main()
结果:
将字符串s反转后输出:
#法1:字符串切片法
s="abcde"
a=s[::-1]
print(a)
输出:
edcba
#递归法
def rvs(s):
if s=="":
return s
else:
return rvs(s[1:])+s[0]#将首字符放最后,并对剩余字符进行反转
s="abcde"
print(rvs(s))
结果:
edcba
count=0 #count为搬运次数
def hanoi(n,a,b,o): #n为圆盘个数,a,b,0是三个柱子,要从a搬运到b,用o来过渡
global count
if n==1: #若n=1,则直接从a搬到b
print("{}:{}->{}".format(1,a,b)) #输出从原柱子到目标柱子
count+=1
else: #若n>1,则使用柱子o来过渡
hanoi(n-1,a,o,b)
print("{}:{}->{}".format(n,a,b))
count+=1
hanoi(n-1,o,b,a)
hanoi(3,"A","B","O")
print(count)
输出:
1:A->B
2:A->O
1:B->O
3:A->B
1:O->A
2:O->B
1:A->B
7
需求主线:
被烤的时间和对应的地瓜状态:
0-3分钟:生的
3-5分钟:半生不熟
5-8分钟:熟的
超过8分钟:烤糊了
添加的调料:
用户根据自己的意愿添加调料
#1.定义类:初始化属性、被烤和添加调料的方法、显示对象的状态str
class Sweetpotato():
def __init__(self): #初始化
self.cooktime = 0 #被烤的时间为0
self.static = '生的' #地瓜的状态为生的
self.condiments = [] #调料列表为空
def cook(self,time):#定义烤地瓜的方法
self.cooktime+=time
if 0<=self.cooktime<3:
self.static = '生的'
elif 3<=self.cooktime<5:
self.static = '半生不熟'
elif 5<=self.cooktime<8:
self.static = '熟了'
elif self.cooktime>=8:
self.static = '烤糊了'
def add_condiments(self,condiment): #添加参数,可传入不同种类的调料
self.condiments.append(condiment)
def __str__(self): #显示对象的信息
return f'这个地瓜烤了{self.cooktime}分钟,状态是{self.static},调料有{self.condiments}'
#2.创建对象并调用对应的实例方法
dg=Sweetpotato()
print(dg)
dg.cook(5) #调用cook方法,并传入时间2
dg.add_condiments('辣椒')#调用add_condiments方法,并传入调料
print(dg)
dg.cook(3)
dg.add_condiments('酱油')
print(dg)
输出:
这个地瓜烤了0分钟,状态是生的,调料有[]
这个地瓜烤了5分钟,状态是熟了,调料有['辣椒']
这个地瓜烤了8分钟,状态是烤糊了,调料有['辣椒', '酱油']
小明单位发了30元的购物卡,小明到超市买三类洗化用品:洗发水15元、香皂2元、牙刷5元。要把30元正好花掉,有哪些购买组合?
a=30
n=a//15 #返回商的整数部分
for i in range(n,-1,-1): #i=2,1,0
m=(a-i*15)//5 #m=0,3,6
for j in range(m,-1,-1): #j=0; 3,2,1,0; 6,5,4,3,2,1,0
k=(a-i*15-j*5)//2
if (a-i*15-j*5)%2==0:
print('可选择的购买组合:\t\t购买洗发水 {} 瓶,香皂 {} 块,牙刷 {}个。'.format(i,j,k))
运行结果:
可选择的购买组合: 购买洗发水 2 瓶,香皂 0 块,牙刷 0个。
可选择的购买组合: 购买洗发水 1 瓶,香皂 3 块,牙刷 0个。
可选择的购买组合: 购买洗发水 1 瓶,香皂 1 块,牙刷 5个。
可选择的购买组合: 购买洗发水 0 瓶,香皂 6 块,牙刷 0个。
可选择的购买组合: 购买洗发水 0 瓶,香皂 4 块,牙刷 5个。
可选择的购买组合: 购买洗发水 0 瓶,香皂 2 块,牙刷 10个。
可选择的购买组合: 购买洗发水 0 瓶,香皂 0 块,牙刷 15个。
首先自已定义一个变量,假如a = 50,然后提示让用户猜数字,如果用户猜的数字过大,就输出大了,如果猜的数字过小,就输出小了,直到用户猜对了,提示用户猜对了,并给出用户一共猜了多少次。
a=50
time=0
while 1:
b = eval(input('输入猜的数字:'))
time+=1
if b>a:
print('大了')
elif b<a:
print('小了')
else:
print('对了,猜了{}次'.format(time))
break
上一题a是提前设好的,代码不修改的话,每次运行正确的数字总是50,现在我们需要将a设成随机的,这一次代码运行a是89,下次运行answer就变成另一个数字了(需要在上一题的基础上,再运用random库里的函数)
import random
a=random.randint(1,5)
time=0
while 1:
b = eval(input('输入猜的数字:'))
time+=1
if b>a:
print('大了')
elif b<a:
print('小了')
else:
print('对了,猜了{}次'.format(time))
break
a依旧是随机的整数,然后由用户猜测a。如猜测的数大于a,则显示“High”,小于则显示“Low”,等于则显示“You won !”,游戏结束。用户最多可以猜4次,如果4次均未猜中,则显示“You lost !”,并给出正确答案,游戏结束。游戏结束后,询问用户是否继续游戏,选择“Y”则开始新的一轮游戏;选择“N”则退出游戏。
chose='y'
while chose=='Y'or chose=='y':
import random
a=random.randint(1,3)
time=0
while time<=3:
b = eval(input('输入猜的数字:'))
time+=1
if b>a : print('大了')
elif b<a : print('小了')
else:
print('win')
break
if time>3:
if b != a:
print('You lost')
else:
print('win')
chose = input('请输入Y(y)继续进行游戏,N(n)退出游戏:')
while chose != 'Y' and chose != 'y' and chose != 'N' and chose != 'n':
print('输入有误,请重新输入:')
chose = input()
使用函数:
chose = 'y'
while chose=='Y' or chose=='y':
import random #导入python提供的random库
num = random.randint(1,100)
#randint产生的随机数包含左右极限,即包含1和100;而randrange产生的随机数区间只包含左极限
def judge(b): #define定义一个judge函数
if b == num:
return 1
else:
return 0
for i in range(1,5): #i=1,2,3,4
b=eval(input('请输入您第{}次所猜的整数:'.format(i)))
if judge(b)==1:
print("You won !")
break
elif b > num:
print("high")
elif b < num:
print("low")
if judge(b)==0:
print("You lost !")
chose=input('请输入Y(y)继续进行游戏,N(n)退出游戏:')
while chose != 'Y' and chose != 'y' and chose != 'N' and chose != 'n':
print('输入有误,请重新输入Y(y)继续进行游戏,N(n)退出游戏:',end = '')
#print默认是打印一行,结尾加换行。end=' '意思是末尾不换行,加空格
chose=input()
输出:
请输入您第1次所猜的整数:50
You won !
请输入Y(y)继续进行游戏,N(n)退出游戏:y
请输入您第1次所猜的整数:10
low
请输入您第2次所猜的整数:30
low
请输入您第3次所猜的整数:50
high
请输入您第4次所猜的整数:45
high
You lost !
请输入Y(y)继续进行游戏,N(n)退出游戏:
篮球比赛是高分的比赛,领先优势可能很快被反超。作为观众,希望能在球赛即将结束时,就提早知道领先是否不可超越。体育作家Bill James发明了一种算法,用于判断领先是否“安全”。
算法描述:
请编写程序实现上述算法的功能,并给出运行结果。
grade=eval(input('请输入领先分数:'))
time=eval(input('请输入剩余时间:'))
t=grade-3
w=input('目前是否为领先队控球(Y or N):')
if w == 'Y' or w == 'y':
g=(t+0.5)**2 #“**”表示幂运算,例如“2**3”表示2的三次方
else:
g=t-0.5
if g<=0:
g=0
g=g**2
if g>time:
print('领先是“安全”的')
else:
print('领先是“不安全”的')
输出:
请输入领先分数:10
请输入剩余时间:9
目前是否为领先队控球(Y or N):y
领先是“安全”的
一个人赶着鸭子去每个村庄卖,每经过一个村子卖去所赶鸭子的一半又一只。这样他经过了七个村子后还剩两只鸭子,问出发时共赶多少只鸭子?
要求:利用递归函数编程实现。
#递归的定义:函数自己调用自己的方式,称为递归。
def f(n): #f(n)代表经过第n个村子之前,鸭子的总数
if n == 8:
return 2 #经过第8个村子之前,剩余2只
else:
sum = f(n+1)*2+2
return sum
print( '一共有{}只鸭子'.format(f(1)) ) #将f(1)的值赋给{}中;f(1)代表在经过第一个村子之前鸭子的总数
输出:
一共有510只鸭子