1. 程式人生 > >python-趣味百題4

python-趣味百題4

[] esc 真分數 ins 個數字 nbsp res print turn

1.賽場統分
在編程競賽中,有10個評委為參賽選手打分,分數為0-100分。選手最後得分為:去掉一個最高分和一個最低分後其余8個分數的平均值。
思路:
1).隨機生成n個分數,放到列表s中
2).找到最高分數和最低分數MaxScore,MinScore
3).累加求和後減去最高分和最低分,除以n-2


import random
def averageScore(n):
  s = []
  for i in range(n):
    s.append(random.randint(0,100))
  print s

  maxScore = 0
  minScore = 100
  sumScore = 0
  for k in s:
    if maxScore < k:
     maxScore = k
    if minScore > k:
     minScore = k
    sumScore += k
  return float(sumScore - maxScore - minScore) / (n - 2)

print averageScore(10)

列表解析:
def averageScore2(n):
  s = [random.randint(0,100) for i in range(n)]
  return float(sum(s) - max(s) - min(s)) / (n - 2)
print averageScore2(10)

2.回文數

回文數:是一種數字,如98789,這個數字正著讀倒讀都是98789
判斷一個數是否是回文數
思路:
1).取出每一個位放入列表
2).a[i] == a[-i-1],i範圍0-len(a)/2
def isPalindromeNum(n):
  a = []
  while n > 0:
    a.append(n % 10)
    n /= 10
  for i in range(len(a)/2):
    if a[i] != a[-i-1]:
    return False
  return True

print isPalindromeNum(n)

3.埃及分數式

分子是1的分數,叫單位分數。古代埃及人在進行分數運算時,只使用分子是1的分數,因此這種分數也叫做埃及分數式或者叫單分子分數。
要求隨便輸入一個真分數,將該分數分解為埃及分數式,如3/7=1/3+1/11+1/231
思路:
1).對於一個真分數a/b,找最接近的1/k
2).如果a % b == 0 ,找到k = b/a
3).如果a % b != 0 ,找到k = b/a+1


def fun(a,b):
  k = b / a
  if b % a == 0:
    res = ‘1/%s‘ % k
  else:
    k += 1
    res = ‘1/%s + %s‘ % (k,fun(a * k - b,b * k))
  return res
print fun(2,3)

python-趣味百題4