python饮料购买_python - 饮料机,if elif与列表法

本文通过一个饮料购买的Python模拟程序,探讨了使用if, elif语句与列表法的效率差异。实验结果显示,在不同场景下,if, elif和列表法的效率各有优劣,具体取决于条件判断的数量和类型。最后,作者提到了列表法在某些情况下可能并不比if, elif语句慢多少。" 98389383,8669271,STC89C51单片机控制两相四线步进电机实践,"['单片机开发', '电机控制', '电子工程', '硬件实践', '嵌入式系统']
摘要由CSDN通过智能技术生成

import time

import os

o1 = "超火"

o2 = "火"

o3 = "温"

o4 = "凉"

o5 = "冰"

while 1:

i=os.system("cls")

input("请投币或刷卡")

while 1:

try:

b=int(input("请选择饮料:\n1.超火\n2.火\n3.温\n4.凉\n5.冰\n0.退出\n\n请输入数字:"))

except:

print("请正确输入")

continue

else:

if b==0:

print("钱已返回,欢迎再来")

for i in range(5,0,-1):

print(i,end="\r")

time.sleep(1)

break

elif b not in range(1,6):

print("请正确输入")

continue

else:

exec("print(\"您的%%s,欢迎再来\"%%o%i)"%b)

for i in range(5,0,-1):

print(i,end="\r")

time.sleep(1)

break

很抱歉我真么什么起名的天赋,所以就这样。

我本来还想做一个无操作几秒钟就回到初始,但需要多进程,于是就放弃了。额,可以改一下,在反馈后,再有个input()模拟取钱和取走饮料。然后倒计时!

这次才用了exec替代了if,效率嘛~

In [4]: %%timeit

...: i=random.randint(1,6)

...: if i==1:""

...: elif i==2:""

...: elif i==3:""

...: elif i==4:""

...: elif i==5:""

...: else:""

...:

...:

861 ns ± 14.4 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)

In [5]: %%timeit

...: import random

...: i=random.randint(1,6)

...: if i==0:""

...: else:exec("%i"%i)

...:

...:

7.59 µs ± 40.3 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)

这里用随机模拟,但这个差距不是一个数量级的,exec是if的10倍耗时。

if增加到60

1.64 µs ± 13 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)

exec增加到60

8.75 µs ± 157 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)

那现在固定if就是最后一个数。

1.49 µs ± 34.6 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)

反而比上面的随机1~60还少。

于是看似结构最简单又最重复的,就是最效率的。

import time

import os

按钮=["","超火","火","温","凉","冰"]

while 1:

i=os.system("cls")

input("请投币或刷卡")

while 1:

try:

b=int(input("请选择饮料:\n1.超火\n2.火\n3.温\n4.凉\n5.冰\n0.退出\n\n请输入数字:"))

except:

print("请正确输入")

continue

else:

if b==0:

print("钱已返回,欢迎再来")

for i in range(5,0,-1):

print(i,end="\r")

time.sleep(1)

break

elif b not in range(1,6):

print("请正确输入")

continue

else:

print("您的%s,欢迎再来"%按钮[b])

for i in range(5,0,-1):

print(i,end="\r")

time.sleep(1)

break

这章完了后,下一章就是我目前看的,第一节就是列表,看完后,可以用在这里。

In [4]: %%timeit

...: from random import randint

...: a=randint(0,9)

...: p=["","","","","",""]

...: if a==0:""

...: elif a in range(1,6):p[a]

...: else:""

...:

...:

1.88 µs ± 60.9 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)

a=0:103nsa=5:402ns

这次模拟0~9的数字键盘,当按键是单键输入时,有十个可能,但只取0 ~ 6:

In [5]: %%timeit

...: from random import randint

...: a=randint(0,9)

...: if a==0:""

...: elif a==1:""

...: elif a==2:""

...: elif a==3:""

...: elif a==4:""

...: elif a==5:""

...: else:""

...:

...:

1.54 µs ± 21.9 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)

a=0:36.4nsa=5:141ns

列表法比if法差的不多了。

而当手动给a赋值为0时,他们的判断步骤是一样的,此时差的这65ns就是给列表赋值的时间,但实际操作时,给列表赋值在一开始就能做。

如果把数值增加到60,有效位数50的话。

if:2.23ns 列表法:2.2ns

除去列表,仅仅看

if elif … vs a in range(50)

在50量级时,后者快

10

1.61 1.77

20

1.741.82 话说这个数就是这样,再多再少都比他少

30

1.85 1.78

原文链接:https://blog.csdn.net/jhsxy2005/article/details/106902655

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值