2017-10-14 41 views
-1

我有以下代码:Python3:被0除错误带有小数

from tkinter import * 

################### Variables 
Screenx = "640" 
Screeny = "480" 
screenSize = str(Screenx + "x" + Screeny) 

global BTC 
BTC = 0.00

global processor 
processor = 5 

global USD 
USD = 150000 

global Auto_Miners 
Auto_Miners = 1 

global Computers 
Computers = 3 

global MinePower 
MinePower = Computers * (0.0001 * processor) 

global entryText 
entryText = ('empty') 

global entryPurpose 
entryPurpose = "Nothing" 

global BTCPrice 
BTCPrice = 0.5 



################## Function Definitions 

def Mine_BTC(): 
    global MinePower 
    global BTC 
    BTC = BTC + MinePower 
    print("Mining " + str(MinePower) + " BitCoins...") 
    BitCoinLabel2.config(text=str(BTC)) 

def Buy_AM(): 
    global Auto_Miners 
    global USD 
    if USD >= 100: 
     Auto_Miners = Auto_Miners + 1 
     print("Bought 1 autominer...") 
     AutominersLabel1.config(text=Auto_Miners) 
     USD = USD - 100 
    else: 
     print("Damn you are poor...") 

def Buy_Computers(): 
    global Computers 
    global USD 
    if USD >= 300: 
     Computers = Computers + 1 
     print("Bought 1 Computer...") 
     ComputerLabel1.config(text=Computers) 
     USD = USD - 300 
    else: 
     print("Damn you are poor...") 

def Buy_Processor(): 
    global USD 
    global processor 
    if USD >= 450: 
     processor = processor + 1 
     print("PP + 1") 
     ProLabel.config(text=processor) 
     USD = USD - 450 
    else: 
     print("What a poor man...") 


def EnterButton(): 
    global entryText 
    global entryPurpose 
    global BTC 
    global USD 
    text_E = EntryA.get() 
    print(text_E) 
    if entryPurpose == ("How many USD to BTC?"): 
     BTC = BTC + (int(text_E) % int(BTCPrice)) 
     print(BTC) 
     USD = USD - text_E 
     print(USD) 
    elif entryPurpose == ("How many BTC to USD?"): 
     USD = text_E * BTCPrice 
     print(USD) 
     BTC = BTC - int(text_E) 
     print(BTC) 










def BuyBTC(): 
    global entryPurpose 
    print(entryPurpose) 
    entryPurpose = ("How many USD to BTC?") 
    print(entryPurpose) 
    entryP.config(text=entryPurpose) 

def SellBTC(): 
    entryPurpose = "How many BTC to USD?" 
    entryP.config(text=entryPurpose) 





################# Screen Mainloop 

screen = Tk() 
screen.title("BitCoin Simulator") 
screen.geometry(screenSize) 

canvas = Canvas() 
canvas.pack() 
canvas.create_line(10, 0, 10, 600) 
canvas.create_rectangle(200, 30, 350, 200) 



EntryA = Entry(screen, textvariable=entryText) 
EntryA.place(x=150, y=300) 

EntryB = Button(screen, text="Enter", bg="blue") 
EntryB.config(command=EnterButton) 
EntryB.place(x=170, y=350) 


BitCoinLabel1 = Label(screen, text="BitCoins: ").place(x=150, y=10) 
BitCoinLabel2 = Label(screen, text=str(BTC)) ### 
BitCoinLabel2.place(x=220, y=10) 

MineButton = Button(screen, text="Mine") 
MineButton.config(command=Mine_BTC) 
MineButton.place(x=150, y=30) 

AutominersButton = Button(screen, text="Auto-Miners:") 
AutominersButton.config(command=Buy_AM) 
AutominersButton.place(x=150, y=80) 

AutominersLabel1 = Label(screen, text=Auto_Miners) 
AutominersLabel1.place(x=270, y=85) 

ComputersButton = Button(screen, text="Computers:") 
ComputersButton.config(command=Buy_Computers) 
ComputersButton.place(x=150, y=120) 

ComputerLabel1 = Label(screen, text=Computers) 
ComputerLabel1.place(x=270, y=120) 

ProButton = Button(screen, text="Processors:") 
ProButton.config(command=Buy_Processor) 
ProButton.place(x=150, y=180) 

ProLabel = Label(screen, text=processor) 
ProLabel.place(x=285, y=180) 

BuyButton = Button(screen, text="BUY") 
BuyButton.config(command=BuyBTC) 
BuyButton.place(x=340, y=170) 

SellButton = Button(screen, text="SELL") 
SellButton.config(command=SellBTC) 
SellButton.place(x=410, y=170) 

entryP = Label(screen, text=str(entryPurpose)) 
entryP.place(x=150, y=270) 




screen.mainloop() 

上面的代码是一个小程序的IM工作关于比特币,它不是成品。

在管线88我有这样的代码: BTC = BTC +(INT(text_E)%INT(BTCPrice))

我由0错误得到司... text_E是从未0 BTCPrice被设定到0.01。 如果我改变这样的东西像9或6578我不会得到错误。所以即时猜测,它需要十进制数(并不只是0.01; 0.88和0.02828太)作为0.我尝试使用/和%分开,但我得到了相同的结果。有人能告诉我如何解决这个问题吗? 谢谢

+0

你知道'int'的含义吗? – user2357112

+0

您正在将数字从'double'转换为'int',因此所有小数都转换为int(四舍五入)。因此所有值都以'0'开始转换为'0'。只需使用像'(text_E%BTCPrice)'这样的语句' –

+0

这对我们来说太多了解代码。请把它凝聚成一个[mcve] –

回答

0

int函数始终将输入四舍五入到最接近的整数。 int(0.01)的计算结果为0,因为小于0.01的最大整数是0.我个人并不明白为什么要将BTCPrice转换为整数,但嘿,我只是在这里回答你的问题。

其它有些事情,虽然:

如果声明在全球层面的变量,没有必要说global variableglobal仅在修改不同范围内的变量时使用。

而不是写BTC = BTC + (int(text_E) % int(BTCPrice)),你可以写BTC += (int(text_E) % int(BTCPrice))。这是一个复合陈述。一般来说,x += y只是表示x = x + y。这也适用于-=, *=, /=, **= (exponentiation), and %=