2017-10-10 13 views
-5

このコードは、人に平均、中央値、モード、または終了を与えるオプションを与えることを目的としていますが、選択時に何が起こるかを正しく動作させるために、そのオプション。誰か助けてくださいこのコードで私を助けてください

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'はどうでしょうか? 2つの最初の要素だけが乗算され、タプルが返されます...そしてエラーが発生します –

+0

私たちは役に立ちますが、それはPythonの基本から始める必要があることを意味します。そのための[チュートリアル](https://docs.python.org/3/tutorial/index.html)があります。 – Matthias

答えて

2

私はこれが宿題だとは思わないが、ちょうど誰かが私が部分的にこれを行うことができる方法を示すつもりだいくつかのPythonを学ぼうとするので。

まず、我々は、機能を理解するのは容易でshowMenu()機能になるだろうしているの基礎をプログラムを分離しようとしている。このループの状態は常にTrueひいてはであること

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

    userInput = input() 

お知らせエスケープすることはできません。私たちは、ユーザの入力を解析する必要があり、いくつかのロジックを追加するには:

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場合は今のプログラムは、ループを終了することができ、彼らは、他の無効な値を入力すると、プログラムはもう一度メニューを表示し、尋ねますユーザーは値を入力します。

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

よし、聞かせての:今すぐif文我々は例にこれらのケースを分離し、それらを処理するための新しい関数を作成するために、編集入力が1、2または3のいずれかであるときの、ケースのために一部に記入しましょう次のステップはshowAverageMenu()関数を作成することです。しかし、まず、ユーザー入力を処理する方法について議論する必要があります。あなたがそれをやったやり方は、10個の異なる入力値を手作業で求めて、10個の異なる変数名の下にそれらを格納することでした。ユーザーが15個の値、つまり30個または100個の値を入力したい場合はどうすればよいですか?それは多くの繰り返しコーディングを必要とするでしょう。幸運にも、より良い方法があります:ユーザ入力をリストに格納するつもりです。このリストは、ユーザーが望むほど大きくすることができます。数字を入力するようにユーザーに求める方法は、3つの異なる操作で同じになるため、毎回呼び出すことができる関数を作成します。この機能はgetInput()と呼ばれます。この関数のロジックは次のようになります。それが有効な入力を追加し、有効な入力

  • かどう

    1. を入力するために数
    2. チェックをユーザーに確認する:行われていないが

      リスト

    私はすでにユーザーに入力を求める方法を見てきましたが、1から4までの数字だけが有効だった前回とは異なり、すべての数字が有効な入力になりました。さらに、最後に入力を文字列として扱いましたが、平均を計算するために整数(または浮動小数点)値が必要になります。文字列を整数に変換するには、の入力:intValue = int(stringValue)をキャストします。しかし、ユーザーが数字ではなく数字以外のいくつかの文字を入力した場合、この関数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ループの条件に注意してください。まだ未定義の変数に設定されていますが、望ましい動作は何ですか?第1に、入力リストは少なくとも1つの要素を含んでいなければならず、第2に、ユーザは値の入力が完了したことを知らせる必要がある。コードでは、これは次のように行うことができます。私たちは条件付きで変数を使用できるように

    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 
    

    今、私たちはNoneuserInputを設定することによって開始します。また、入力リストが空の場合はループを続行します。最後に、入力リストに数値が含まれている場合、ループの条件に反映されたループを終了するために「完了」とタイプすることができることをユーザーに伝えます。ユーザーが終了した場合は、リストを返します。

    今、私たちは、ユーザからの入力を取得する汎用ソリューションを作成している、我々は、操作を実装する関数を定義する必要があります。 showAverageMenu()を見てみましょう:

    ご覧のとおり、解決方法は簡単です。我々がしなければならなかったのは、平均を計算して印刷することでした。平均を計算するために、組み込みメソッドを使用してリストの合計を計算し、リストの長さで割ります。

  • +0

    ハイテクJurgyを思ったんだけど、私はあなたが何をあなたを教え場合、それが役立つだろうライン15 –

    +0

    でエラーが発生しているが、あなたのコードを試してみました私の答えのコードは1つのブロブではないので、15行目です。さらに正確なエラーは知っておくと便利です。 – 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

    おかげで、それは数字だけを印刷して、それは私の平均を与えるものではありませんなぜ私はちょうど –

    関連する問題