今日进度:程序关闭sys.exit();重启程序subprocess.call() & sys.argv[0];不用np.multiply()的写法;range()函数
本次笔记是对Day5笔记里的号码生成器的补充和优化。
关闭程序sys.exit():
- 可以用这个函数退出程序;
- 使用前要import sys。
之前:
id = input("Please input the first 17 number:")
if len(id) != 17:
print('Wrong number!') #问题在于if之后的语句仍会执行
else:
print(id)
现在:
import sys
id = input("Please input the first 17 number: ")
if len(id) != 17:
sys.exit('Wrong number!') #此后程序便会退出
else:
print(id)
但如果不想让程序就此退出,想重新开始(或懒得手动开始)的话,就需要用到程序重启。
重启程序subprocess.call() & sys.argv[0]
- 运行subprocess.call()需要import subprocess;
- sys.argv[0]为文件路径,即调用代码本身;
- subprocess.call()的使用格式,先这么记吧,以后看明白了再补充;
- subprocess.call() 为python3.5以前版本使用(本篇为3.10.13),3.5之后官方推荐使用subprocess.run()。
import sys
import subprocess
id = input("Please input the first 17 number: ")
if len(id) != 17:
chioce = input('Wrong number! Do you want to input again? (y/n):')
if chioce == 'y':
subprocess.call(['python', sys.argv[0]])
else:
print(id)
- 另外,可以用lower()函数对于用户输入的答案进行优化,防止用户输入了大写的“Y”程序就无法识别的情况:
之前:
if chioce == 'y':
现在:
if chioce.lower() == 'y':
不用np.multiply()的写法:
- 想要实现两个列表里的对应位置的数据的相乘并累加,可以不用numpy.multiply(),一个简单的list1[i]*list2[i]即可(是的可以直接这么乘);
- 累加可以用for循环与range()函数;
id = input('Please input the first 17 number: ')
list_pri = list(id) #这里之前都不变
weight = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2] #将各个系数合并乘一个list
sigma = 0
for i in range(17): #range(17)里面包含的整数索引是0-16
sigma += weight[i] * list1[i]
print(sigma)
result1 = sigma % 11
print(result1)
range()函数:
- range(end) 或 range(start, end, step)
- 只填一个数时,为指定end;填两个数时,为指定start与end,step默认为1;填三个数时,才是都指定;
- 左闭右开;
for i in range(17):
print(i) # 输出为0-16,一共17个数
for i in range(1, 5):
print(i) #输出为1,2,3,4,索引1-4的数,左闭右开不包括索引为5的数
for i in range(1, 12, 3):
print(i) #输出为1,4,7,10,在索引为1-11的数据之中,每3个数取一个,step = 3