|
|
发表于 2016-1-27 18:02:26
|
显示全部楼层
回帖奖励 +3 鱼币
本帖最后由 落殇飞羽 于 2016-1-28 23:12 编辑
几乎把毕生所学都用上了......醉了,一个个问题也是被解决.....重新复习了,列表,元组,字典的数据读取和存储........
心累,但很高兴!!!
请版主检查并拍砖!!!!
  
老代码存在问题,我对题目的理解不对,所以重写了程序!!!
- #取得中位数
- def two_split(first, last):
- mid = (first + last) // 2
- return mid
-
-
- def compare(answer, guess, count1, count2, first1, last1):
- #得到每轮猜中的次数,并放入列表
- if guess == answer:
- count1 += 1
- #print(count2)
- list2.append(count2)
-
-
-
-
- #传入两个交换变量first1,last1以保存上一轮的列表中间数
- elif guess > answer:
- count2 += 1
- if first1 == 0:
- first1 = first
- last1 = guess
- else:
- first1 = first1
- last1 = guess
-
-
- guess = two_split(first1, last1)
- #print(guess)
- compare(answer, guess, count1, count2, first1, last1)
- else:
- count2 += 1
- if last1 == 0:
- first1 = guess
- last1 = last
- else:
- first1 = guess
- last1 = last1
- guess = two_split(first1, last1)
- #print(guess)
- compare(answer, guess, count1, count2, first1, last1)
-
- import random
- sum1 = sum0 = 0
- i = 0
- first = 1
- last = 100
- first1 = 0
- last1 = 0
- count1 = 0 #记录一轮猜中的次数
- count2 = 1 #记录猜中的轮数
- list1 = [1,100]
- global list2
- list2 = []
- dic1 = {}
- while i < 100000:
-
- answer = random.randint(1,100)
- if answer in list1:
- guess = random.randint(1,2)
- list2.append(guess)
- #print(answer, guess)
- else:
- guess = two_split(first, last)
- #print(answer, guess)
- compare(answer, guess, count1, count2, first1, last1)
- i += 1
- #把次数和轮数对应起来
- for each_1 in list2:
-
- if each_1 not in dic1:
- dic1[each_1] = 1
- else:
- dic1[each_1] += 1
-
- #print(list2)
- #按照key的从小到大排列输出次数与对应轮数
- list3 = list(dic1)
- list3.sort()
- for each_2 in list3:
- print('尝试%d次实验猜对的有%d轮'%(each_2, dic1[each_2]))
- sum0 = each_2 * dic1[each_2]
- sum1 += int(sum0)
- print('平均%f次猜中'%(sum1/100000))
-
复制代码
-----------------------------------------------------------------------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------------------------------------------------------------------
- import random
- answer = random.randint(1,100)
- count = 0
- count1 = 0 #count1统计每一轮出现所有猜对的次数
- count2 = 1 #count2统计每轮猜对之前所实验的次数
- count3 = 1 #count3统计实验次数相等的轮数
- count4 = 0 #count4统计所有猜对的轮数
- count5 = 0 #count5统计所有猜的次数之和
- list1 = []#列表放置10000个所猜的数
- list2 = []#列表放置每次猜中之前的次数
- list3 = []#列表放置排序后的key值
- #形成一个100000所猜数的列表
- while count < 100000:
- number = random.randint(1,100)
- list1.append(number)
- count += 1
- #将实验次数与猜中的轮数对应放入一个字典
- dic1 = {}
- i = 0
- while i < 100000:
- if list1[i] == answer:
-
- count4 += 1
- count1 += 1
- count5 += count2
- list2.append(count2)
- count1 = 0
- count2 = 0
-
- else:
- count2 += 1
- i += 1
- for each_1 in list2:
- if each_1 not in dic1:
- dic1[each_1] = 1
-
- else:
- count3 += 1
- dic1[each_1] = count3
- #按照key的从小到大排列输出次数与对应轮数
- list3 = list(dic1)
- list3.sort()
- for each_2 in list3:
- print('尝试%d次实验猜对的有%d轮'%(each_2, dic1[each_2]))
- print('共猜对%d轮'%count4)
- if count4 != 0:
- print('平均每轮猜中需要%d次'%(count5/count4))
- #print(list1)
- print(answer)
复制代码 |
|