Quick actions

cmd+k|ctrl+k

Navigation

Languages

口算训练

Snippet info

Language

Python

Visibility

public

Author

jiemnij

Created

2019-11-15T02:07:14Z

Updated

2019-11-26T05:54:57Z

#encoding:utf-8
from random import *

#----configuration option--------------------------------------- 
份数 		     = 10		
数据范围         = (0, 10)		
最大值范围       = (10, 20)	
两项算式个数     = 100		
符号 			 = (0, 0)				
两项算式填写位置 = (0, 2) 	
三项算式填写位置 = (0, 3)	

#---const variable-----------------------------------------------
LINE_CHARS = 80	
LINE_CNTS  = 4				
sym_str =('+', '-')		
KH = '(    )'			

def displaystr(str_all, line_chars, line_calcs):	
	new_str = []
	i = 0
	while i < len(str_all):
		new_str.append(str_all[i:i+line_calcs])
		i += line_calcs
		
	for i in new_str:
		ln = (line_chars - len(i[line_calcs-1]))//(line_calcs-1)
		j = 0
		while j < line_calcs - 1:
			print(f'{i[j]:{ln}}', end='')
			j += 1
		print(i[j])	
		

def make_two(cnt, dat_range, sum_range, ssym, bracket):
	dat = []
	while len(dat) < cnt:
		x = randint(*dat_range)
		y = randint(*dat_range)
		s = x + y
		if s >= sum_range[0] and s <= sum_range[1]:
			sym = randint(*ssym)
			p = randint(*bracket)
			if sym == 1: d = [f'{s:2}', f'{x:2}', f'{y:2}']
			else: 		 d = [f'{x:2}', f'{y:2}', f'{s:2}']
			d[p] = KH
			dat.append(f'{d[0]} {sym_str[sym]} {d[1]} = {d[2]}')
	return dat
	
			
def make_three(cnt, dat_range, sum_range, ssym, bracket, size):		
	dat = []
	while len(dat) < cnt:
		sym1 = randint(*ssym)
		sym2 = randint(*ssym)
		if (sym1 == 1):	x = randint(*sum_range)
		else:    		x = randint(*dat_range)
		y = randint(*dat_range)
		z = randint(*dat_range)
		p = randint(*bracket)
			
		if sym1 == 0: s1 = x + y
		else:		  s1 = x - y
		if s1 > sum_range[1] or s1 < sum_range[0]:
			continue
		
		if sym2 == 0: s2 = s1 + z
		else:		  s2 = s1 - z
		if s1 > sum_range[1] or s1 < sum_range[0]:
			continue
		
		a = [f'{x}', f'{y}', f'{z}', f'{s2}']
		a[p] = KH
		ss = f'{a[0]}{sym_str[sym1]}{a[1]}{sym_str[sym2]}{a[2]}={a[3]}'
		dat.append(f'{ss:{size}}')
	return dat


def make_one_page(cnt):	
	all = []	
	print(f'                            {最大值范围[1]}以内的加减法训练{cnt}                         ')
	print('一年班姓名;                     使用时间;                  成绩:错(   )题')   
	print('')
	all += make_two(两项算式个数,       数据范围, 最大值范围, 符号, 两项算式填写位置)
	all += make_three(100- 两项算式个数, 数据范围, 最大值范围, 符号, 三项算式填写位置, len(all[0]))
	displaystr(all, LINE_CHARS, LINE_CNTS)	
	print('')
	print('')

if __name__ == '__main__':
	for i in range(1, 份数+1):
		make_one_page(i)
INFO