import tkinter as tk
from tkinter import ttk
import pandas as pd
from prettytable import PrettyTable
'''号码投注方案计算器'''
class AppWindow(tk.Frame):
def __init__(self, master=None):
super().__init__(master)
self.grid(row=0, column=0, sticky="nsew")
self.setupUI()
def setupUI(self):
leftwidth = 5
rightwidth = 15
mainframe = tk.Frame(self)
mainframe.pack(fill="x")
rowframe1 = tk.Frame(mainframe)
rowframe1.pack(fill="x", ipadx=3, ipady=3)
self.peilv = tk.DoubleVar()
self.peilv.set(42)
tk.Entry(rowframe1, textvariable=self.peilv).pack(side=tk.RIGHT)
tk.Label(rowframe1, text="赔率").pack(side=tk.RIGHT)
rowframe2 = tk.Frame(mainframe)
rowframe2.pack(fill="x", ipadx=3, ipady=3)
self.start_beishu = tk.IntVar()
self.start_beishu.set(1)
tk.Entry(rowframe2, textvariable=self.start_beishu).pack(side=tk.RIGHT)
tk.Label(rowframe2, text="起始倍数").pack(side=tk.RIGHT)
rowframe3 = tk.Frame(mainframe)
rowframe3.pack(fill="x", ipadx=3, ipady=3)
self.zhushu = tk.IntVar()
self.zhushu.set(10)
tk.Entry(rowframe3, textvariable=self.zhushu).pack(side=tk.RIGHT)
tk.Label(rowframe3, text="注数").pack(side=tk.RIGHT)
rowframe4 = tk.Frame(mainframe)
rowframe4.pack(fill="x", ipadx=3, ipady=3)
self.min_shouyilv = tk.DoubleVar()
self.min_shouyilv.set(0.5)
tk.Entry(rowframe4, textvariable=self.min_shouyilv).pack(side=tk.RIGHT)
tk.Label(rowframe4, text="最小收益率").pack(side=tk.RIGHT)
rowframe5 = tk.Frame(mainframe)
rowframe5.pack(fill="x", ipadx=3, ipady=3)
ttk.Button(rowframe5, text='确定', command=self.calc).pack(side=tk.RIGHT)
def calc_a_row(self, index, last_beishu, last_cumsumtouru):
'''根据上期倍数、上期累计投入,计算本期'''
zhushu, peilv, min_shouyilv = self.zhushu.get(), self.peilv.get(), self.min_shouyilv.get()
bs = last_beishu
while True:
cumsumtouru = last_cumsumtouru + bs * zhushu
cumsumshouyi = bs * peilv - cumsumtouru
if cumsumshouyi/cumsumtouru < min_shouyilv:
bs += 1
else:
break
return [index+1, bs, zhushu, bs*zhushu, cumsumtouru, round(bs*peilv, 2), round(cumsumshouyi, 2), round(cumsumshouyi/cumsumtouru, 4)]
def calc_n_row(self, n=10):
'''计算n期'''
res = []
for i in range(n):
if i == 0:
res.append(self.calc_a_row(i, self.start_beishu.get(), 0))
elif i > 0:
res.append(self.calc_a_row(i, res[-1][1], res[-1][4]))
return res
def calc(self):
'''倍投计算(用prettytable显示结果)'''
n = 10
res = self.calc_n_row(n)
table = PrettyTable(['期数','倍数','注数','本期投入','累计投入','本期收益','累计收益','累计收益率'])
for i in range(n):
table.add_row(res[i])
print(table)
def calc2(self):
'''倍投计算(用pandas显示结果)'''
n = 10
res = self.calc_n_row(n)
df = pd.DataFrame(res, columns=['期数','倍数','注数','本期投入','累计投入','本期收益','累计收益','累计收益率'])
print(df)
def main():
root = tk.Tk()
root.columnconfigure(0, weight=1)
root.rowconfigure(0, weight=1)
root.resizable(width=False, height=False)
root.title("计算器")
app = AppWindow(root)
app.mainloop()
if __name__ == "__main__":
main()
pass
本文转自罗兵博客园博客,原文链接:http://www.cnblogs.com/hhh5460/p/5686919.html,如需转载请自行联系原作者