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:103ns a=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.4ns a=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.74 1.82 话说这个数就是这样,再多再少都比他少
30
1.85 1.78