Calculator - Equals is broken
This commit is contained in:
274
Calculator.py
274
Calculator.py
@@ -1,155 +1,151 @@
|
||||
import discord
|
||||
|
||||
addition = lambda x, y: x + y
|
||||
subtraction = lambda x, y: x - y
|
||||
multiplication = lambda x, y: x * y
|
||||
division = lambda x, y: x / y
|
||||
exponent = lambda x, y: x ** y
|
||||
|
||||
funckyDict = {
|
||||
addition: "+",
|
||||
subtraction: "-",
|
||||
multiplication: "*",
|
||||
division: "/",
|
||||
exponent: "^"
|
||||
}
|
||||
|
||||
|
||||
async def number(self, interaction: discord.Interaction, number):
|
||||
if self.output is not None:
|
||||
self.inputOne = 0
|
||||
self.output = None
|
||||
self.inputOne = self.inputOne * 10 + number
|
||||
self.numDigs = self.numDigs + 1
|
||||
await interaction.response.edit_message(
|
||||
content=self.display(),
|
||||
view=self)
|
||||
|
||||
async def operator(self, interaction: discord.Interaction, operation):
|
||||
self.output = None
|
||||
self.inputTwo = self.inputOne
|
||||
self.inputOne = 0
|
||||
self.expression = operation
|
||||
await interaction.response.edit_message(
|
||||
content=self.display(),
|
||||
view=self)
|
||||
|
||||
|
||||
class NumberButton(discord.ui.Button):
|
||||
|
||||
def __init__(self, number: int, row) -> None:
|
||||
super().__init__()
|
||||
self.number = number
|
||||
self.row = row
|
||||
self.style = discord.ButtonStyle.blurple
|
||||
self.label = str(number)
|
||||
|
||||
async def callback(self, interaction: discord.Interaction):
|
||||
await number(self.view, interaction, self.number)
|
||||
|
||||
class OperatorButton(discord.ui.Button):
|
||||
|
||||
def __init__(self, function, row) -> None:
|
||||
super().__init__()
|
||||
self.function = function
|
||||
self.row = row
|
||||
self.style = discord.ButtonStyle.red
|
||||
self.label = funckyDict[function]
|
||||
|
||||
async def callback(self, interaction: discord.Interaction):
|
||||
await operator(self.view, interaction, self.function)
|
||||
|
||||
class Calculator(discord.ui.View):
|
||||
def __init__(self, *, timeout=180):
|
||||
super().__init__(timeout=timeout)
|
||||
self.numDigs = 0
|
||||
self.MAXIMUMBARSIZE = 30
|
||||
m = 0
|
||||
self.inputOne = 0
|
||||
self.inputTwo = None
|
||||
self.expression = None
|
||||
self.output = None
|
||||
self.digit = 1
|
||||
self.addition = lambda x, y: x + y
|
||||
self.subtraction = lambda x, y: x - y
|
||||
self.multiplication = lambda x, y: x * y
|
||||
self.division = lambda x, y: x / y
|
||||
self.exponent = lambda x, y: x ** y
|
||||
self.funckyDict = {
|
||||
self.addition: "+",
|
||||
self.subtraction: "-",
|
||||
self.multiplication: "*",
|
||||
self.division: "/",
|
||||
self.exponent: "^"
|
||||
}
|
||||
self.clearRequirement = 0
|
||||
def __init__(self, *, timeout=180):
|
||||
super().__init__(timeout=timeout)
|
||||
self.numDigs = 0
|
||||
self.MAXIMUMBARSIZE = 30
|
||||
m = 0
|
||||
self.inputOne = 0
|
||||
self.inputTwo = None
|
||||
self.expression = None
|
||||
self.output = None
|
||||
self.digit = 1
|
||||
|
||||
def numDigits(self, integer):
|
||||
numDigits = 0
|
||||
while(integer):
|
||||
numDigits += 1
|
||||
integer = integer // 10
|
||||
return numDigits
|
||||
|
||||
def clear(self):
|
||||
self.inputOne = 0
|
||||
self.inputTwo = None
|
||||
self.output = None
|
||||
self.clearRequirement = 0
|
||||
self.clearRequirement = 0
|
||||
|
||||
def display(self):
|
||||
inputOneLength = self.numDigits(self.inputOne)
|
||||
inputTwoLength = self.numDigits(self.inputTwo)
|
||||
outputLength = self.numDigits(self.output)
|
||||
if (self.inputTwo is None) and (self.output is None):
|
||||
padding = self.MAXIMUMBARSIZE - inputOneLength - 1
|
||||
displayOutput = " ".join(['`', ' ' * padding, f"{self.inputOne}", "`"])
|
||||
elif (self.output is None):
|
||||
padding = self.MAXIMUMBARSIZE - inputOneLength - inputTwoLength - 3
|
||||
displayOutput = " ".join(['`', ' ' * padding, f"{self.inputTwo}", f"{self.funckyDict[self.expression]}", f"{self.inputOne}", "`"])
|
||||
else:
|
||||
padding = self.MAXIMUMBARSIZE - inputOneLength - inputTwoLength - outputLength - 4
|
||||
displayOutput = " ".join(['`', ' ' * padding, f"{self.inputTwo}", f"{self.funckyDict[self.expression]}", f"{self.inputOne}", "=", f"{self.output}", "`"])
|
||||
return displayOutput
|
||||
|
||||
async def number(self, interaction: discord.Interaction, number):
|
||||
if self.output is not None:
|
||||
self.inputOne = 0
|
||||
self.output = None
|
||||
self.inputOne = self.inputOne * 10 + number
|
||||
self.numDigs = self.numDigs + 1
|
||||
await interaction.response.edit_message(
|
||||
content=self.display(),
|
||||
view=self)
|
||||
|
||||
async def operator(self, interaction: discord.Interaction, operation):
|
||||
self.output = None
|
||||
self.inputTwo = self.inputOne
|
||||
self.inputOne = 0
|
||||
self.expression = operation
|
||||
await interaction.response.edit_message(
|
||||
content=self.display(),
|
||||
view=self)
|
||||
numRows = 4
|
||||
numColumns = 4
|
||||
|
||||
@discord.ui.button(label="^", style=discord.ButtonStyle.red, row=4)
|
||||
async def power(self, interaction: discord.Interaction, button: discord.ui.Button):
|
||||
await self.operator(interaction, self.exponent)
|
||||
|
||||
@discord.ui.button(label="0", style=discord.ButtonStyle.blurple,row=4)
|
||||
async def zero(self, interaction: discord.Interaction, button: discord.ui.Button):
|
||||
await self.number(interaction, 0)
|
||||
|
||||
@discord.ui.button(label="1", style=discord.ButtonStyle.blurple, row=1)
|
||||
async def one(self, interaction: discord.Interaction, button: discord.ui.Button):
|
||||
await self.number(interaction, 1)
|
||||
buttonFunctions = [
|
||||
[1, 2, 3, addition],
|
||||
[4, 5, 6, multiplication],
|
||||
[7, 8, 9, subtraction],
|
||||
[exponent, 0, None, division]
|
||||
]
|
||||
|
||||
@discord.ui.button(label="2", style=discord.ButtonStyle.blurple, row=1)
|
||||
async def two(self, interaction: discord.Interaction, button: discord.ui.Button):
|
||||
await self.number(interaction, 2)
|
||||
for i in range(0, numRows):
|
||||
for j in range(0, numColumns):
|
||||
item = buttonFunctions[i][j]
|
||||
if item is None:
|
||||
continue
|
||||
if isinstance(item, int):
|
||||
|
||||
@discord.ui.button(label="3", style=discord.ButtonStyle.blurple, row=1)
|
||||
async def three(self, interaction: discord.Interaction, button: discord.ui.Button):
|
||||
await self.number(interaction, 3)
|
||||
button = NumberButton(item, i)
|
||||
else:
|
||||
|
||||
@discord.ui.button(label="4", style=discord.ButtonStyle.blurple, row=2)
|
||||
async def four(self, interaction: discord.Interaction, button: discord.ui.Button):
|
||||
await self.number(interaction, 4)
|
||||
button = OperatorButton(item, i)
|
||||
self.add_item(button)
|
||||
|
||||
@discord.ui.button(label="5", style=discord.ButtonStyle.blurple, row=2)
|
||||
async def five(self, interaction: discord.Interaction, button: discord.ui.Button):
|
||||
await self.number(interaction, 5)
|
||||
|
||||
@discord.ui.button(label="6", style=discord.ButtonStyle.blurple, row=2)
|
||||
async def six(self, interaction: discord.Interaction, button: discord.ui.Button):
|
||||
await self.number(interaction, 6)
|
||||
|
||||
@discord.ui.button(label="7", style=discord.ButtonStyle.blurple, row=3)
|
||||
async def seven(self, interaction: discord.Interaction, button: discord.ui.Button):
|
||||
await self.number(interaction, 7)
|
||||
def numDigits(self, integer):
|
||||
numDigits = 0
|
||||
while(integer):
|
||||
numDigits += 1
|
||||
integer = integer // 10
|
||||
return numDigits
|
||||
|
||||
@discord.ui.button(label="8", style=discord.ButtonStyle.blurple, row=3)
|
||||
async def eight(self, interaction: discord.Interaction, button: discord.ui.Button):
|
||||
await self.number(interaction, 8)
|
||||
def clear(self):
|
||||
self.inputOne = 0
|
||||
self.inputTwo = None
|
||||
self.output = None
|
||||
self.clearRequirement = 0
|
||||
|
||||
@discord.ui.button(label="9", style=discord.ButtonStyle.blurple, row=3)
|
||||
async def nine(self, interaction: discord.Interaction, button: discord.ui.Button):
|
||||
await self.number(interaction, 9)
|
||||
def display(self):
|
||||
inputOneLength = self.numDigits(self.inputOne)
|
||||
inputTwoLength = self.numDigits(self.inputTwo)
|
||||
outputLength = self.numDigits(self.output)
|
||||
if (self.inputTwo is None) and (self.output is None):
|
||||
padding = self.MAXIMUMBARSIZE - inputOneLength - 1
|
||||
displayOutput = " ".join(['`', ' ' * padding, f"{self.inputOne}", "`"])
|
||||
elif (self.output is None):
|
||||
padding = self.MAXIMUMBARSIZE - inputOneLength - inputTwoLength - 3
|
||||
displayOutput = " ".join(['`', ' ' * padding, f"{self.inputTwo}", f"{funckyDict[self.expression]}", f"{self.inputOne}", "`"])
|
||||
else:
|
||||
padding = self.MAXIMUMBARSIZE - inputOneLength - inputTwoLength - outputLength - 4
|
||||
displayOutput = " ".join(['`', ' ' * padding, f"{self.inputTwo}", f"{funckyDict[self.expression]}", f"{self.inputOne}", "=", f"{self.output}", "`"])
|
||||
return displayOutput
|
||||
|
||||
@discord.ui.button(label="+", style=discord.ButtonStyle.red, row=1)
|
||||
async def plus(self, interaction: discord.Interaction, button: discord.ui.Button):
|
||||
await self.operator(interaction, self.addition)
|
||||
|
||||
@discord.ui.button(label="*", style=discord.ButtonStyle.red, row=2)
|
||||
async def mult(self, interaction: discord.Interaction, button: discord.ui.Button):
|
||||
await self.operator(interaction, self.multiplication)
|
||||
|
||||
@discord.ui.button(label="-", style=discord.ButtonStyle.red, row=3)
|
||||
async def minus(self, interaction: discord.Interaction, button: discord.ui.Button):
|
||||
await self.operator(interaction, self.subtraction)
|
||||
|
||||
@discord.ui.button(label="=", style=discord.ButtonStyle.green, row=4)
|
||||
async def equals(self, interaction: discord.Interaction, button: discord.ui.Button):
|
||||
|
||||
if self.inputTwo is None:
|
||||
await interaction.response.edit_message(
|
||||
content="ERROR",
|
||||
view=self)
|
||||
|
||||
if self.clearRequirement:
|
||||
self.clear()
|
||||
else:
|
||||
self.clearRequirement += 1
|
||||
self.output = self.expression(self.inputTwo, self.inputOne)
|
||||
if (self.inputTwo == 9) and (self.inputOne == 10):
|
||||
self.output = 21
|
||||
await interaction.response.edit_message(
|
||||
content=self.display(),
|
||||
view=self)
|
||||
|
||||
self.inputOne = self.output
|
||||
self.inputTwo = None
|
||||
|
||||
@discord.ui.button(label="/", style=discord.ButtonStyle.red, row=4)
|
||||
async def divide(self, interaction: discord.Interaction, button: discord.ui.Button):
|
||||
await self.operator(interaction, self.division)
|
||||
@discord.ui.button(label="=", style=discord.ButtonStyle.green, row=4)
|
||||
async def equals(self, interaction: discord.Interaction, button: discord.ui.Button):
|
||||
|
||||
if self.inputTwo is None:
|
||||
await interaction.response.edit_message(
|
||||
content="ERROR",
|
||||
view=self)
|
||||
|
||||
if self.clearRequirement:
|
||||
self.clearRequirement = 0
|
||||
self.clear()
|
||||
else:
|
||||
self.clearRequirement += 1
|
||||
self.output = self.expression(self.inputTwo, self.inputOne)
|
||||
if (self.inputTwo == 9) and (self.inputOne == 10):
|
||||
self.output = 21
|
||||
await interaction.response.edit_message(
|
||||
content=self.display(),
|
||||
view=self)
|
||||
|
||||
self.inputOne = self.output
|
||||
self.inputTwo = None
|
||||
Reference in New Issue
Block a user