1

私はこのプログラムを動作させようとしていて、それは実行されますが、実行されると、この問題を発見しました。現在、gradePointとクレジット時間を要求し、想定どおりにGPAを出力しますが、gradePointに何でも入力すると、値が出力されます。私が欲しいのは、ユーザーが0.0〜4.0の数値を入力した場合にのみgradePointが機能することです。私はifループのようなある種のループを考えていましたが、これを行うためのより簡単な方法(または好ましい方法)はありますか?

コードは次のとおりです。

def stu():
stu = Student

class Student:
def __init__(self, name, hours, qpoints):
    self.name = name
    self.hours = float(hours)
    self.qpoints = float(qpoints)

def getName(self):
    return self.name

def getHours(self):
    return self.hours

def getQpoints(self):
    return self.qpoints

def getStudent(infoStr):
    name, hours, qpoints = infoStr.split("\t")
    return Student(name, hours, qpoints)

def addGrade(self, gradePoint, credits):
    self.qpoints = gradePoint * credits
    self.hours = credits
    self.gradePoint = float(gradePoint)
    self.credits = float(credits)

def gpa(self):
    return self.qpoints/self.hours

def main():
stu = Student(" ", 0.0, 0.0)
credits = int(input("Enter Credit Hours "))
gradePoint = float(input("Enter Grade Point"))
if gradePoint > 4.0:
        print("Please enter a Grade Point that is less then 4.")
stu.addGrade(gradePoint,credits)
output = stu.gpa()
print("\nStudent GPA is: ", output)


main()

これはシェルのプリントアウトです(GPAで成績が繰り返されていることはわかっています。これはクラス用であり、スケルトンプログラムを使用していくつかの変更を行うことになっています):

Enter Credit Hours 4
Enter Grade Point 3.5
Student GPA is:  3.5

Enter Credit Hours 12
Enter Grade Point 3.2
Student GPA is:  3.2

ありがとう!

編集:コメントで提案されているようにifループを実行しましたが、必要なものが出力されるという点である程度機能しましたが、停止して正しい入力を待つことはありませんでした。それをどうやってやるのか正確にはわかりません。

シェルからの新しいプリントは次のとおりです。

Enter Credit Hours 4
Enter Grade Point 3.5
Student GPA is:  3.5

Enter Credit Hours 4
Enter Grade Point 4.5
Please enter a Grade Point that is less then 4.
Student GPA is:  4.5
4

2 に答える 2

1

ユーザー入力が要件を満たしているかどうかを確認し、満たさない場合は例外をスローできます。これにより、プログラムはエラーメッセージをログに記録し、無効なユーザー入力で停止します。

これを行う最も基本的な方法は、assertステートメントを使用することです。

def main():
    stu = Student(" ", 0.0, 0.0)
    credits = int(input("Enter Credit Hours "))
    assert credits > 0 and credits < 4, "Please enter a number of Credit Hours between 0 and 4."

有効な入力が入力されるまでアプリケーションがユーザーにプロンプ​​トを表示し続けるようにするには、少なくとも1つのwhileループが必要です。

例えば:

def main():
    stu = Student(" ", 0.0, 0.0)
    while True:
        credits = int(input("Enter Credit Hours "))
        if credits > 0 and credits < 4:
            break
        else:
            print("Please enter a number of Credit Hours between 0 and 4")

    while True:
        gradePoint = float(input("Enter Grade Point"))
        if gradePoint <= 4.0:
            break
        else:
            print("Please enter a Grade Point that is less then 4.")

    stu.addGrade(gradePoint,credits)
    output = stu.gpa()
    print("\nStudent GPA is: ", output)
于 2012-04-13T23:38:18.193 に答える
0

範囲内でユーザーから有効なfloatを収集する関数を作成します。

def getValidFloat(prompt, error_prompt, minVal, maxVal):
    while True:
        userInput = raw_input(prompt)
        try:
            userInput = float(userInput)
            if minVal <= userInput <= maxVal:
                return userInput
            else: raise ValueError
        except ValueError:
            print error_prompt

そして、次のように使用します。

gpa = getValidFloat(
    "Enter Grade Point ",
    "You must enter a valid number between 1.0 and 4.0",
    1,
    4)

出力は次のようになります。

Enter Grade Point 6.3
You must enter a valid number between 1.0 and 4.0
Enter Grade Point 3.8
于 2012-04-14T02:45:25.253 に答える