具体需求:
红球 6 01-33
蓝球 1 01-16
产生的双色球号码不能重复,写到一个文件里面,每一行是一条,格式:
红球: 01 03 05 07 08 18 蓝球:16
红球需要排序,是升序
以下是实现过程:
import random def balls(n): f = open('balls', 'a+', encoding='utf-8') for i in range(n): ball = [] red_balls = set() while True: red_balls.add(str(random.randint(1, 33)).zfill(2)) if len(red_balls) == 6: break red_list = list(red_balls) red_list.sort() ball.append('红球:') ball.append(' '.join(red_list)) ball.append(' ') ball.append('篮球:') ball.append(str(random.randint(1, 16)).zfill(2)) ball.append('\n') f.writelines(ball) f.close() balls(6)
在写的过程中踩了几个坑,现在来细数下:
1,red_list.sort()是对原列表进行排序,执行完之后red_list的顺序已经发生变化,函数返回None,之前把red_list.sort()赋值给一个新列表,导致新列表一直是None。
2,因为数据格式要求红球在前,篮球在后,所以每行数据内容也要求有顺序,所以使用列表存放每行的数据。
3,在写入文件时,一开始写入所有数据组成的大列表,结果报错:TypeError: write() argument must be str, not list,这是因为writelines()只能传入字符串或者传入一个字符序列,并将该字符序列写入文件,即可以传入字符串,列表,元组,集合形式的字符序列,但是序列内不能包括整数或者其他类型的数据,只能是字符串,如传入[1,2,2,3]会报错TypeError: write() argument must be str, not int,如果传入字典,写入的内容是所有的key值。