我正在建立一个简单的毕达哥拉斯定理计算器,我写了一段时间,以作为类和函数的介绍制作更高级的版本。我已成功对其进行编程以解决c,a或b,并在用户需要进行另一次计算时循环计算函数。
我最近尝试添加主菜单功能,因此如果用户需要解决c,现在需要解决b,他/她可以返回主菜单选择他们需要的选项。遇到一些困难,我已经成功将其编码到
的位置但是如果他们试图返回并选择另一个选项,它只会返回到python提示符。我很难用文字描述这个问题,因为其他事情也会出错。例如,如果您执行少于2次计算并尝试返回,则您当前使用的方法将继续循环。我不知道为什么会发生这种情况,看来我做的一切都是正确的。我已经尝试过排除故障,但如上所述,我的特殊情况很难描述。我确信我做得不对,我想知道怎么做。我的代码和截图附在下面。
代码
' A Pythagoren Therom Calculator (v.2.0)
By: Anon_104'''
#imports
import time, math
#Welcome statement (Welcomes the user)
print("Welcome to the pythagorean theorem calculator!")
time.sleep(1)
#a class to organize and keep everything in order ;)
class pytha:
#custom function for solving for c
def cal():
global ques1
a = int(input('Please enter the "A" value: '))
b = int(input('Please enter the "B" value: '))
print("Calculating...")
time.sleep(1)
print('The "C" value is ')
c = math.sqrt(a*a + b*b)
print(c)
ques1 = str(input("Another Calculation? (y/n) Or return to main menu? (back)"))
#function for solving for a or b, given c
def cal2():
global ques2
var = input('Please input either the "A" or "B" value: ')
c = input('Please input the "C" value: ')
var2 = float(c)**2 - float(var)**2
ans = math.sqrt(var2)
print('The "A"/"B" value is {0}'.format(ans))
ques2 = str(input("Another Calculation? (y/n) Or return to main menu? (back)"))
def mainmenu():
global query1
query1 = input('Welcome to the main menu! Solve for "C" or "A"/"B"? (opt1/opt2)')
pytha.mainmenu()
#The loop and break code for function 1
if query1 == 'opt1':
pytha.cal()
while ques1 == 'y':
pytha.cal()
if ques1 == 'back':
pytha.mainmenu()
while query1 == 'opt1':
pytha.cal()
elif ques1 == 'n':
print("Quitting... ")
time.sleep(1.6)
quit
#The loop and break code for function 2
if query1 == 'opt2':
pytha.cal2()
while ques2 == 'y':
pytha.cal2()
if ques2 == 'back':
pytha.mainmenu()
while query1 == 'opt2':
pytha.opt2
elif ques2 == 'n':
print("Quitting... ")
time.sleep(1.6)
quit
P.S这是我在帮助板上做的第一个问题,所以如果我没有做正确的话,那就去吧。
答案 0 :(得分:0)
最后不需要查询语句。在方法中包含对方法的调用,或者为了返回主菜单而创建一个新方法。我还建议在处理可能的小数时使用float()而不是int(),但我没有改变它。
class Pytha(object):
def __init__(self):
import time, math
self.math = math
self.time = time
print("Welcome to the pythagorean theorem calculator!\n")
self.time.sleep(1)
self.mainmenu()
#custom function for solving for c
def cal(self):
try:
a = int(input('\nPlease enter the "A" value: '))
b = int(input('Please enter the "B" value: '))
print("Calculating...")
self.time.sleep(1)
print('The "C" value is ')
c = self.math.sqrt(a*a + b*b)
print(c)
except ValueError:
print("\nError: Please enter a number\n")
self.cal()
self.rerun()
#function for solving for a or b, given c
def cal2(self):
try:
var = int(input('\nPlease input either the "A" or "B" value: '))
c = int(input('Please input the "C" value: '))
var2 = float(c)**2 - float(var)**2
ans = self.math.sqrt(var2)
print('The "A"/"B" value is {0}'.format(ans))
except ValueError:
print("\nError: Please enter a number\n")
self.cal2()
self.rerun()
def mainmenu(self):
query1 = str(input('Welcome to the main menu! Solve for "C" or "A"/"B" or quit program? (opt1/opt2/q)\n'))
if query1.lower() == "opt1":
self.cal()
elif query1.lower() == "opt2":
self.cal2()
elif query1.lower() == 'q':
quit()
else:
print("Error: Please type 'opt1' or 'opt2' or 'q'\n")
self.mainmenu()
def rerun(self):
query1 = str(input('\nAnother Calculation? Solve for "C" or "A"/"B" or quit program? (opt1/opt2/q)\n'))
if query1.lower() == "opt1":
self.cal()
elif query1.lower() == "opt2":
self.cal2()
elif query1.lower() == 'q':
quit()
else:
print("Error: Please type 'opt1' or 'opt2' or 'q'\n")
self.rerun()
app = Pytha()
你可以做更多的事情来清理它。我把所有东西放在课堂上并将所有内容称为self.something()。
如果用户执行OPT1或Opt1,我会为您的回复添加.lower()。
我创建了一个单独的重新运行函数,在每次操作后调用。它在第一次运行后自动进入此状态。
我还使用了try / except作为输入,因为在调用int()时输入非数字字符会得到ValueError。相反,它现在会告诉用户输入一个数字,然后再试一次。
对于退出,您需要将其称为quit()。
一旦调用类, init 就会加载,这允许您执行启动它,例如包括导入,设置变量,打印消息和运行函数。这种方式全包。
最后,标准做法是用大写字母开始你的班级名称(虽然不是要求)。
希望这可以帮助您更好地了解如何使用类。
编辑:
如果您想为自己的工具构建自定义导入,而无需直接与用户互动,可以像这样构建:
class Pythag(object):
#custom function for solving for c
def solve_C(a, b):
from math import sqrt
a = int(a)
b = int(b)
c = sqrt(a*a + b*b)
return (c)
#function for solving for a or b, given c
def solveAB(var, c):
from math import sqrt
var = int(var)
c = int(c)
var2 = float(c)**2 - float(var)**2
ans = sqrt(var2)
return(ans)
然后您可以将其导入另一个脚本。如果您的pythag脚本名为pythag.py,则将其导入为
from pythag import Pythag
然后调用这样的模块:
Pythag.solve_C(4,5)