岗哨环蟒

2024-09-27 07:35:43 发布

您现在位置:Python中文网/ 问答频道 /正文

我应该如何在python中设置一个sentinel循环,只有当新输入的数字大于旧输入的数字时,循环才会继续运行?

这就是我现在所拥有的,但我知道这是不对的。

    totalScore = 0
    loopCounter = 0
    scoreCount = 0
    newScore = 0
    oldscore = newscore - 1
    print("Enter the scores:")
    score = (raw_input("Score 1"))
    while newScore >= oldScore:
        newScore = int(raw_input("Score " ) + (loopCounter + 1))
        scoreTotal = scoreTotal+newScore+oldScore
        scoreCount = scoreCount + 1
        loopCounter = loopCounter + 1
    averageScore = scoreTotal / scoreCount
    print "The average score is " + str(averageScore)

Tags: inputraw数字sentinelscoreprintloopcounternewscore
3条回答

你的代码有很多问题,甚至不能运行。这是一个工作版本,可以做你想做的事情。

使用while循环管理新值和旧值是编码中常见的习惯用法,值得实践。

编辑:我自己搞错了代码行的顺序。代码现在给出了正确的平均值。

scoreTotal = 0
loopCounter = 0
scoreCount = 0
newScore = 0
oldScore = 0
print("Enter the scores:")
newScore = int(raw_input("Score 1: "))
while newScore >= oldScore:
    scoreTotal += newScore
    scoreCount += 1
    loopCounter += 1
    oldScore = newScore
    newScore = int(raw_input("Score " + str(loopCounter + 2) + ": "))
averageScore = float(scoreTotal) / float(scoreCount)
print scoreTotal, scoreCount
print "The average score is " + str(averageScore)

事实上,处理这个问题的方法是使用一个列表,而不是每次都扔掉个人的分数。

scores = [0] # a dummy entry to make the numbers line up
print("Enter the scores: ")
while True: # We'll use an if to kick us out of the loop, so loop forever
    score = int(raw_input("Score {}: ".format(len(scores)))
    if score < scores[-1]:
        print("Exiting loop...")
        break
        # kicks you out of the loop if score is smaller
        # than scores[-1] (the last entry in scores)
    scores.append(score)
scores.pop(0) # removes the first (dummy) entry
average_score = sum(scores) / len(scores)
# sum() adds together an iterable like a list, so sum(scores) is all your scores
# together. len() gives the length of an iterable, so average is easy to test!
print("The average score is {}".format(average_score))

你需要不断地向用户询问一个新的输入,而每次输入的数字都会更大。您可以使用一个列表来保存输入的每个分数,然后使用^{} built-in function为您完成以下工作:

scores = []
while True:
   current_size = len(scores)
   score = int(raw_input("Score %s" % (current_size + 1)))
   # Check if there's any score already entered and then if the new one is 
   # smaller than the previous one. If it's the case, we break the loop
   if current_size > 0 and score < scores[-1]:
       break
   scores.append(score)

# avg = total of each scores entered divided by the size of the list
avg = sum(scores) / len(scores)
print "The average score is %s" % avg

相关问题 更多 >

    热门问题