if __name__ == '__main__': # 1 初始化用户积分信息:初始化所有用户积分为0,字典结构存储:{user_id:user_score} users = {0:0,1:0,2:0,3:0,4:0,5:0,6:0,7:0,8:0,9:0,10:0} # 2 用户积分变动 # 用户积分变动k次 for i in range(20): users_id = random.randint(0, 10) # 变动过程中保证积分不会为负,随机数下限为users_id对应当前积分的相反数-users[users_id] delta_score = random.randint(-users[users_id], 8000) users[users_id] += delta_score with open('updates.csv', 'a') as f: csv_re = csv.writer(f) csv_re.writerow([users_id, delta_score]) print(f'积分变动:{users_id} {delta_score}') #print(users) # 3 输出当前用户积分:把字典users打印出来 print('当前用户积分:') for key,value in users.items(): print(str(key) + ':' + str(value)) # 4 记录每周抽奖前的用户信息 write_candidates(users) # 5 没有积分(积分为0)的用户没有资格参与抽奖,过滤掉 join = {} for uid, users_score in users.items(): if users_score != 0: join[uid] = users_score # 6 开始抽奖 for i in range(3): while not is_draw_time(): time.sleep(60) print(f'第{i+1}轮抽奖开始:') # 本轮参与抽奖用户为join # print(join) if users == {}: print("本周抽奖结束") break prize_winner = draw_first_prize(join) draw_second_prize(join) time.sleep(10) print('本周抽奖结束') today_date_str = datetime.now().strftime('%Y_%m_%d') os.rename('updates.csv', '{}.csv'.format(today_date_str))这个程序为什么不能自己结束运行
时间: 2024-02-14 17:15:53 浏览: 111
python— if __name __ == ‘__main __’
5星 · 资源好评率100%
这个程序可以自己结束运行,但是在第6步中开启了3轮抽奖,如果在抽奖过程中没有满足结束条件,程序就会一直运行下去,直到3轮抽奖结束或者手动停止程序。如果希望程序在一定时间内自动结束运行,可以在第6步中加入一个计时器,超过一定时间后强制结束程序。比如可以使用`time.time()`获取当前时间戳,然后在每轮抽奖开始时记录下来,每次循环检查是否超过设定时间,如果超过就强制结束程序。代码示例:
```
import time
...
# 6 开始抽奖
for i in range(3):
start_time = time.time() # 记录开始时间
while not is_draw_time():
time.sleep(60)
if time.time() - start_time > 1800: # 如果超过30分钟,则强制结束程序
break
if time.time() - start_time > 1800: # 如果超过30分钟,则强制结束程序
break
print(f'第{i+1}轮抽奖开始:')
...
print('本周抽奖结束')
...
```
这样程序就会在30分钟内自动结束运行。
阅读全文