Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python函数赢得';开始_Python_Function_Python 3.x - Fatal编程技术网

Python函数赢得';开始

Python函数赢得';开始,python,function,python-3.x,Python,Function,Python 3.x,我正在编写python计算器,下面是代码: #Python Calculator import sys; import cmath; def plus(): num1 = float(input("Input the first number: ")); num2 = float(input("Input the second number: ")); ans = (num1 + num2); print(ans); exit(); retur

我正在编写python计算器,下面是代码:

#Python Calculator

import sys;
import cmath;

def plus():
    num1 = float(input("Input the first number: "));
    num2 = float(input("Input the second number: "));
    ans = (num1 + num2);
    print(ans);
    exit();
    return;

def minus():
    num1 = float(input("Input the first number: "));
    num2 = float(input("Input the second number: "));
    ans = (num1 - num2);
    print(ans);
    exit();
    return;

def divide():
    num1 = float(input("Input the first number: "));
    num2 = float(input("Input the second number: "));
    ans = (num1 / num2);
    print(ans);
    exit();
    return;

def multiply():
    num1 = float(input("Input the first number: "));
    num2 = float(input("Input the second number: "));
    ans = (num1 * num2);
    print(ans);
    exit();
    return;

def power():
    num1 = float(input("Input the number: "));
    num2 = float(input("Input the power: "));
    ans = cmath.pow(num1, num2);
    print(ans);
    exit();
    return;

def square():
    num1 = float(input("Input the number: "));
    ans = cmath.sqrt(num1);
    print(ans);
    exit();
    return;

def inputs():
    print("Select which function you would like to use:");
    print("1 for Plus");
    print("2 for Minus");
    print("3 for Divide");
    print("4 for Multiply");
    print("5 for Power");
    print("6 for Square Root");
    func = input();

    if func == 1:
        plus();
    elif func == 2:
        minus();
    elif func == 3:
        divide();
    elif func == 4:
        multiply();
    elif func == 5:
        power();
    elif func == 6:
        square();
    return;

def exit():
    exit = str(input("Run again? y/n: "));
    if exit == "Y" or exit == "y":
        inputs();
        print ("");
    elif exit == "N" or exit == "n":
        sys.exit();
    else:
        exit();
    return;

print ("Python Calculator");
print("");
inputs();

现在的问题是,一旦你输入了你想要运行的函数,程序就会关闭。我对python比较陌生,但不熟悉编程。此外,此代码的编码方式是否有任何问题(即,草率编码),请告诉我。

您的输入可能是字符串(例如
“6”
),而不是数字
6

总的来说,我认为您的代码不必要太长,并且违反了原则。对于初学者,您可以在一个地方请求两个数字,然后调用相关函数执行相关操作

更简洁的设计将使用Python操作符:

funcs=[operator.add, operator.sub, operator.div, 
       operator.mul, operator.pow, your_square_function]
您可以询问函数类型,然后调用相关函数(参见Lev的答案)

有一个有趣的例子是
sqr
,它接受一个参数,而不是两个。可以通过指定每个函数的参数数来解决此问题:

funcs=[(operator.add, 1), (operator.sub, 2), (operator.div, 2),
       (operator.mul, 2), (operator.pow, 2), (your_square_function, 1)]
现在的解决方案很简单-询问函数号,询问正确的参数数,然后调用
funcs[input\u number][0]

可以详细阐述这一思想,以便还存储函数名:

funcs=[("Plus", operator.add, 1),   ("Minus", operator.sub, 2), 
       ("Divide", operator.div, 2), ("Multiply", operator.mul, 2), 
       ("Power", operator.pow, 2),  ("Square root", your_square_function, 1)]
现在,您的程序应该如下所示(伪代码):


您的输入可能是字符串(例如
“6”
),而不是数字
6

总的来说,我认为您的代码不必要太长,并且违反了原则。对于初学者,您可以在一个地方请求两个数字,然后调用相关函数执行相关操作

更简洁的设计将使用Python操作符:

funcs=[operator.add, operator.sub, operator.div, 
       operator.mul, operator.pow, your_square_function]
您可以询问函数类型,然后调用相关函数(参见Lev的答案)

有一个有趣的例子是
sqr
,它接受一个参数,而不是两个。可以通过指定每个函数的参数数来解决此问题:

funcs=[(operator.add, 1), (operator.sub, 2), (operator.div, 2),
       (operator.mul, 2), (operator.pow, 2), (your_square_function, 1)]
现在的解决方案很简单-询问函数号,询问正确的参数数,然后调用
funcs[input\u number][0]

可以详细阐述这一思想,以便还存储函数名:

funcs=[("Plus", operator.add, 1),   ("Minus", operator.sub, 2), 
       ("Divide", operator.div, 2), ("Multiply", operator.mul, 2), 
       ("Power", operator.pow, 2),  ("Square root", your_square_function, 1)]
现在,您的程序应该如下所示(伪代码):


正如Adam所指出的,问题在于没有将
func
转换为
int
。 由于您还需要关于代码组织的建议,因此我可以建议以下内容来删除堆叠的
elif
子句:

functions = [plus, minus, divide, multiply, power, square]
try:
    func = int(input())
    functions[func-1]()
except:
    print("Please choose an existing function number.")
    exit()

正如Adam所指出的,问题在于没有将
func
转换为
int
。 由于您还需要关于代码组织的建议,因此我可以建议以下内容来删除堆叠的
elif
子句:

functions = [plus, minus, divide, multiply, power, square]
try:
    func = int(input())
    functions[func-1]()
except:
    print("Please choose an existing function number.")
    exit()


你知道你不需要在每个字符串的末尾加分号,不是吗?你也不需要在每个函数的末尾显式地
返回
。从函数返回是函数到达末尾时发生的事情。此外,从
exit()
调用
inputs()
会运行一段时间,但这会很混乱,并且会进一步误解函数的工作方式。无论如何,要找出程序的实际问题,应该从现有的命令窗口运行它(程序退出时该窗口不会关闭).你也在忍受同样糟糕的设计。我不是在做广告,但是这里也有可以应用的(很明显是python3的更正)。你知道你不需要在每个字符串的末尾放分号,不是吗?你也不需要在每个函数的末尾显式地
返回
。从函数返回是函数到达末尾时发生的事情。此外,从
exit()
调用
inputs()
会运行一段时间,但这会很混乱,并且会进一步误解函数的工作方式。无论如何,要找出程序的实际问题,应该从现有的命令窗口运行它(程序退出时该窗口不会关闭).你也在忍受同样糟糕的设计。我不是在做广告,但是这里也有可以应用的(带有明显的python3更正)。这可以扩展到操作符-见我的答案。我会谨慎地建议python新手使用
除了所有的
@MattH你会在那里写
除了(ValueError,indexer)
吗?理想的方法是捕获
ValueError
并回答“请输入一个数字”,然后用“请输入一个从1到%s的数字”回答
indexer。或者明确检查您的列表是否包含此类索引。这可以扩展到运算符-请参阅我的答案。我会谨慎地建议python新手使用
除所有之外的
@MattH您会在那里编写
除(ValueError,indexer)
吗?理想的方法是捕获
ValueError
并回复“请输入一个数字”,然后用“请输入一个从1到%s的数字”作为索引器。或者明确检查您的列表是否包含此类索引。非常感谢,python正在输入“func”“变量作为字符串,因此修复了程序,现在我需要按照您的建议进行更好的设计。再次感谢你!您选择了正确的语言-您会惊讶于您的代码会如此简短和可读。非常感谢,python将“func”变量作为字符串输入,因此这修复了程序,现在我需要按照您的建议进行更好的设计。再次感谢你!您选择了正确的语言—您会惊讶于代码的长度和可读性。