今日进度:
- np.multiply()函数;
- 如何让input的数据成为列表;
- 如何将列表里的str转化为int;
- 如何将列表里的数字相加;
- zip()函数
自己编写的程序:某某号码生成器(Part1)
import numpy as np
id = input("Please input the first 17 number: ")
if len(id) != 17:
print('Wrong number!')
else:
print(id)
list_pri = list(id) #让输入的数据成为列表,生成的数据在列表里是字符串
list1 = [7, 9, 10, 5, 8, 4, 2]
list2 = [1, 6, 3]
list_id = [int(i) for i in list_pri] #将列表里的字符串类型转化为int
#前7位数:
step1 = np.multiply(list_id[0:7], list1) # list_id[i] * 对应系数;list的切片是冒号
#结果也是个列表 [7 18 0 5 0 20 2]
sigma1 = 0
for num in step1: #使用for循环遍历列表,将每个元素与sigma相加后重新赋值给sigma
sigma1 += num
#8-10位数:
step2 = np.multiply(list_id[7:10], list2)
sigma2 = 0
for num in step2:
sigma2 += num
#11-17位数:
step3 = np.multiply(list_id[10:], list1)
sigma3 = 0
for num in step3: #使用for循环遍历列表,将每个元素与sigma相加后重新赋值给sigma
sigma3 += num
total = sigma1 +sigma2 + sigma3
result = total % 11 # %用来计算余数
if result == 10:
print('Your last number is 2')
elif result == 9:
print('Your last number is 3')
elif result == 8:
print('Your last number is 4')
elif result == 7:
print('Your last number is 5')
elif result == 6:
print('Your last number is 6')
elif result == 5:
print('Your last number is 7')
elif result == 4:
print('Your last number is 8')
elif result == 3:
print('Your last number is 9')
elif result == 2:
print('Your last number is X')
elif result == 1:
print('Your last number is 0')
elif result == 0:
print('Your last number is 1')
np.multiply()函数:
- 两个数组的对应位置的数字相乘
- 只能用于相同的dtype(数据类型)相乘,否则会报错:
list1 = [7, 9, 10, 5, 8, 4, 2],
list_id = ['1', '2', '0', '1', '0', '5', '1'],
test = np.multiply(list_id[0:7], list1)
'''
会报错:numpy.core._exceptions._UFuncNoLoopError: ufunc 'multiply' did not contain a loop with signature matching types (dtype('<U1'), dtype('int32')) -> None
其中dtype('<U1')指str类型
'''
如何让input的数据成为列表:
id = input("Please input the first 17 number: ")
list_pri = list(id)
在输入的数据上套一个list().
如何将列表里的str转化为int:
方法一: list_id = [int(i) for i in list_pri]
方法二:使用map()函数:
list_id = list(map(int, list_pri))
如何将列表里的数字相加:
使用for循环遍历列表(指step1),将每个元素与sigma相加后重新赋值给sigma:
sigma1 = 0
for num in step1:
sigma1 += num
print(sigma1)
zip()函数的使用:
zip():将两个列表组合成元组
list1 = [1, 2, 3, 4]
list2 = [5, 6, 7, 8]
print(list(zip(list1, list2)))
#[(1, 5), (2, 6), (3, 7), (4, 8)]
因此不能用zip()来使得两个列表里的数据相乘,因为zip()输出的结果是列表:
如果遇到zip()转换的结果是:<zip object at 0x000002BB86247EC0>
则是因为Python3与Python2的版本差异,通过list(zip(……)),即可转换为列表