2017-10-10 51 views
-5

这段代码是为了给这个人提供平均值,中位数,模式或退出的选项,但是我不能得到选项1-4来正确地工作,当他们选择时会发生什么该选项。有人可以帮我用这个代码

ans1=ans1 
ans2=ans2 

# define functions 

def average(num1, num2, num3, num4, num5, num6, num7, num8, num9, num10): 
    """This function adds two numbers""" 
    return total== num1, + num2, + num3, + num4, + num5, + num6, + num7, + num8, + num9, + num10 == ans1 
    total/ans1 

def median(num1, num2, num3, num4, num5, num6, num7, num8, num9, num10): 
    """This function subtracts two numbers""" 
    return total == num1 - num2 - num3 - num4 - num5 - num6 - num7 - num8 - num9 - num10 == ans2 
    total/ans2 

def mode(num1, num2, num3, num4, num5, num6, num7, num8, num9, num10): 
    """This function multiplies two numbers""" 
    return num1 * num2, num3, num4, num5, num6, num7, num8, num9, num10 

def quit(): 
    quit() 


# This gives the user the options in a menu format 
print("Select operation.") 
print("1.average") 
print("2.median") 
print("3.Mode") 
print("4.quit") 
#this is where the user enters the number for what the user wants done 
choice = input("Enter choice 1,2,3,4: ") 

################################################################# 
#this then asks the user for the 10 numbers 
num1 = int(input("Enter first number: ")) 
num2 = int(input("Enter second number: ")) 
num3 = int(input("enter third number: ")) 
num4 = int(input("enter fourth number: ")) 
num5 = int(input("enter fith number: ")) 
num6 = int(input("enter sixth number: ")) 
num7 = int(input("enter seventh number: ")) 
num8 = int(input("enter eights number: ")) 
num9 = int(input("enter ninth number: ")) 
num10 = int(input("enter tenth number: ")) 

print(num1) 
print(num2) 
print(num3) 
print(num4) 
print(num5) 
print(num6) 
print(num7) 
print(num8) 
print(num9) 
print(num10) 



if choice == '1':   
    print (ans1, num1, num2, num3, num4, num5, num6, num7, num8, num9, num10) 
def adding (num1, num2, num3, num4, num5, num6, num7, num8, num9, num10): 
    s = (num1 + num2 + num3 + num4 + num5 + num6 + num7 + num8 + num9 + num10)/10 
    print("this is what they add up to") 
    print(s) 
    return s 

    elif choice == '2': 
     print(ans2(num1, num2, num3, num4, num5, num6, num7, num8, num9, num10)) 

    elif choice == '3': 
     print(num1,"*", num2, num3, num4, num5, num6, num7, num8, num9, num10,"=", multiply(num1, num2, num3, num4, num5, num6, num7, num8, num9, num10)) 
    elif choice == '4': 
     quit() 
+1

你应该首先清理代码示例。 if-elif-block内有一个函数定义(带有错误的缩进)。 –

+3

代码中有很多错误。什么'ans1 = ans1'和'ans2 = ans2'应该这样做?那么'num1 * num2,num3,num4,num5,num6,num7,num8,num9,num10'怎么办?它只会乘以两个第一个元素并返回一个元组...并且错误继续存在 –

+0

我们可以提供帮助,但这意味着我们必须从Python的基础知识入手。有一个[教程](https://docs.python.org/3/tutorial/index.html)。 – Matthias

回答

2

因为我不认为这是家庭作业,但只是一个人努力学习一些Python我将部分地说明了如何可以做到这一点。

首先我们要在节目中很容易分开理解的功能,这是怎么回事的基础是showMenu()功能:

def showMenu(): 
    while True: 
    print("Select operation.") 
    print("1.average") 
    print("2.median") 
    print("3.Mode") 
    print("4.quit") 

    userInput = input() 

注意这个循环是条件始终True,因此不能逃脱。要添加一些逻辑,我们必须分析用户输入:

def showMenu(): 
    while True: 
    ... 
    userInput = input() 
    if userInput == "1" or userInput == "2" or userInput == "3": 
     # Do something 
    elif userInput == "4": 
     exit() 
    else: 
     print("Invalid input, try again") 

现在程序可以退出循环,如果用户输入4,如果他们进入其他任何无效的值,程序则只是再次显示菜单,询问用户输入一个值。现在,让我们填写部分的情况下,当输入是1,2或3。我们编辑在if语句来分隔情况下,这些情况下,并创建一个新的函数来处理它们:

if userInput == "1": 
    showAverageMenu() 
elif userInput == "2": 
    showMedianMenu() 
elif userInput == "3": 
    showModeMenu() 
elif userInput == "4": 
    exit() 
else: 
    print("Invalid input, try again") 

好吧,让我们下一步将是创建showAverageMenu()函数。但是,我们首先必须讨论我们要处理用户输入的方式。你这样做的方式是手动要求十个不同的输入值,并将它们存储在十个不同的变量名称下。如果我们希望用户输入15个值,或30或100,该怎么办?这将需要大量的重复编码。幸运的是,还有更好的方法:我们将把用户输入存储在一个列表中。该列表可以与用户想要的一样大。因为我们要求用户输入数字的方式在三个不同的操作中是相同的,所以我们将创建一个我们可以每次调用的函数。该功能将被称为getInput()。这个函数的逻辑将是这个样子:

虽然没有做过:

  1. 询问用户输入一个数
  2. 检查它是否是一个有效的输入
  3. 追加有效输入来一个清单

我们已经看到如何要求用户输入,但是,不像上次只有数字1到4有效,现在所有的数字都是有效的输入。此外,上次我们将输入作为字符串处理,但为了计算平均值,我们需要整数(或浮点)值。把一个字符串转换成一个整数我们可以转换成输入:intValue = int(stringValue)。但是,如果用户没有输入数字,但输入了一些非数字字符,则此函数会提高 a ValueError。为了处理这个我们必须捕获的错误。

够的话,让我们展示一些代码:

def getInput(): 
    inputList = [] 
    print("Please enter an integer") 
    while some_condition: 
    userInput = input() 
    try: 
     intValue = int(userInput) 
     inputList.append(intValue) 
    except ValueError: 
     print("'{}' is not an integer".format(userInput)) 

在这里你可以看到,我们尝试用户输入强制转换为整数,但如果失败,则ValueError被捕获,并且用户及时提醒他们应该输入一个数字。还要注意,这个函数从一个名为inputList的空列表开始,如果转换不失败,该列表将被填充整数值。最后,注意while循环的条件,至今它被设置为一个未定义的变量,但是期望的行为是什么?首先,输入列表必须包含至少一个元素,其次,用户必须发信号通知他们已完成输入值。在这个代码可以做这样的:

def getInput(): 
    userInput = None 
    inputList = [] 
    print("Please enter an integer") 
    while userInput != "done" or len(inputList) == 0: 
    userInput = input() 
    ... 
     print("'{}' is not an integer".format(userInput)) 
    print("Please enter an integer") 
    if len(inputList) > 0: 
     print("Or type 'done' if you are finished") 

    return inputList 

现在我们开始通过设置userInputNone这样我们就可以使用该变量的条件。如果输入列表为空,我们也继续循环。最后,如果输入列表包含数字,我们告诉用户他们可以输入'done'来退出循环,这反映在循环的条件中。如果用户完成,我们返回列表。

现在我们已经创建了一个通用的解决方案来从用户检索输入,我们必须定义实现这些操作的函数。让我们来看看showAverageMenu()

def showAverageMenu(): 
    print("***Averaging***") 
    inputList = getInput() 
    avg = sum(inputList)/len(inputList)) 

    print("The Average of") 
    print(inputList) 
    print("is: {}\n".format(avg) 

正如你所看到的,该解决方案是很容易的。我们所要做的就是计算平均值并打印出来。要计算平均值,我们可以使用内置方法计算列表的总和并将其除以列表的长度。

现在其他两种方法都有点困难,但作为练习留给读者;)

+0

嗨Jurgy我试过你的代码,但我有一个错误在第15行 –

+0

这将有助于,如果你告诉我你的东西第15行是因为我的答案中的代码不是一个blob。此外,确切的错误将有助于知道。 – Jurgy

0

我为您解决了几个部分的代码,并在解释我做了什么的注释中。在这段代码中有几件事需要修复,而我没有修复它们。我解释了我做了什么,所以你应该能够通过并修复它们,但是如果你有任何问题请留言,我会尽我所能解释。正如很多人上面所说的,你应该通过一个python教程。 Codecademy has a relatively good one.

#You should declare these first to ensure that you have access to them throughout the program 
num1 = int(input("Enter first number: ")) 
num2 = int(input("Enter second number: ")) 
num3 = int(input("enter third number: ")) 
num4 = int(input("enter fourth number: ")) 
num5 = int(input("enter fith number: ")) 
num6 = int(input("enter sixth number: ")) 
num7 = int(input("enter seventh number: ")) 
num8 = int(input("enter eights number: ")) 
num9 = int(input("enter ninth number: ")) 
num10 = int(input("enter tenth number: ")) 

print(num1) 
print(num2) 
print(num3) 
print(num4) 
print(num5) 
print(num6) 
print(num7) 
print(num8) 
print(num9) 
print(num10) 

#It looks like you are trying to use the variables above, so you don't need them as parameters. 
#If you use them as parameters, the function will get confused and use the wrong ones. 
def average(): 
    """This function adds two numbers""" 
    #Set total before you try to return it. 
    #When you create a variable, it's just 1 equal sign, it's 2 when you are checking if something is equal 
    #Also, never use 2 equal signs such as total = x == y 
    #When you are adding something, you don't need commas. 
    total = num1 + num2 + num3 + num4 + num5 + num6 + num7 + num8 + num9 + num10 
    #The return statement should be the last thing in a function 
    return total 


def median(): 
    """This function subtracts two numbers""" 
    total = (num1 - num2 - num3 - num4 - num5 - num6 - num7 - num8 - num9 - num10)/2 
    return total 

#I'll let you take it from here. 
def mode(num1, num2, num3, num4, num5, num6, num7, num8, num9, num10): 
    """This function multiplies two numbers""" 
    return num1 * num2, num3, num4, num5, num6, num7, num8, num9, num10 

def quit(): 
    quit() 


# This gives the user the options in a menu format 
print("Select operation.") 
print("1.average") 
print("2.median") 
print("3.Mode") 
print("4.quit") 
#this is where the user enters the number for what the user wants done 
choice = input("Enter choice 1,2,3,4: ") 


if choice == '1':   
    print (ans1, num1, num2, num3, num4, num5, num6, num7, num8, num9, num10) 
def adding (num1, num2, num3, num4, num5, num6, num7, num8, num9, num10): 
    s = (num1 + num2 + num3 + num4 + num5 + num6 + num7 + num8 + num9 + num10)/10 
    print("this is what they add up to") 
    print(s) 
    return s 

    #The first if statement should be an if statement, not an elif statement. Since this is a new function, it's a new if statement. 
    if choice == '2': 
     print(ans2(num1, num2, num3, num4, num5, num6, num7, num8, num9, num10)) 

    elif choice == '3': 
     print(num1,"*", num2, num3, num4, num5, num6, num7, num8, num9, num10,"=", multiply(num1, num2, num3, num4, num5, num6, num7, num8, num9, num10)) 
     elif choice == '4': 
     quit() 
+0

感谢您的帮助我只是想知道为什么它不给我一个平均的,因为它只是打印数字 –

相关问题