实验三 聪明的尼姆游戏 (educoder)

实验三 聪明的尼姆游戏(人机对战)
实验目的:
(1)理解尼姆游戏规则
(2)了解并熟练使用while循环
(3)理解带else子句的循环结构执行流程
(4)理解循环语句的break语句的作用
(5)了解使用循环和异常处理结构对用户输入进行约束的用法
实验内容:
尼姆游戏是一个著名的游戏,有很多变种玩法。两个玩家轮流从一堆物品中拿走一部分。在每一步中,玩家可以自由选择拿走多少物品,但是必须至少拿走一个并且最多只能拿走一半物品,然后轮到下一个玩家。拿走最后一个物品的玩家输掉游戏。
在聪明模式中,计算机每次拿走足够多的物品使得堆的大小是2的幂次方减1——也就是3,7,15,31或63.除了堆的大小已经是2的幂次方减1,在其他情况下这样走都是符合游戏规则。在那种情况下,计算机就按游戏规则随机拿走一些。
编写程序,模拟聪明版的尼姆游戏。

from math import log2
from random import randint

def ever_step(n):
	num = n - (2 ** int(log2(n)) - 1)
	half = n // 2
	if num <= half:
		return num
	return randint(1,half)
def smart(n):
	while n > 1:
		print("你的回合,还剩下{}物品".format(n))
		while True:
			try:
				num = int(input("你要拿走的数量:"))
				assret 1 <= num <= n // 2
				break
			except:
				pass
		n -= num
		if n == 1:
			return "我输了"
		n -= every_step(n)
	else:
		return "你输了"
print(smart(randint(1,100)))

实验三 猜单词游戏
实验内容:编写程序模拟猜单词游戏。程序运行时,系统随机生成一个单词,然后将产生后的单词中字母的顺序进行打乱,组成新的一个单词。然后提示用户进行猜测,并根据用户输入进行必要的提示(猜对了,猜错了),如果猜错了,则提示用户继续猜,每一个用户有三次猜测的机会。猜对了则提示用户,“猜对了,恭喜过关”,然后询问用户是否要继续下一关。

import random

WORDS = ('ErenYeager','ArminArlert',' MikasaAckerman','JeanKirstein','Annie','Sasha','improve','Krista','Connie','Marco')
isGo_on = 'Y'
while isGo_on == 'Y' or isGo_on == 'y':
   randomWord = random.choice(WORDS)
   correctWord = randomWord
   jumbleWord = ''
   while randomWord:
       position = random.randrange(len(randomWord))
       jumbleWord += randomWord[position]
       randomWord = randomWord[:position] + randomWord[(position + 1):]
   print('乱序后单词:',jumbleWord)
   guessWord = input('\n请您猜猜看:')
   while guessWord != correctWord and guessWord != '':
       print("猜错了")
       guessWord = input("继续您猜:")
   if guessWord == correctWord:
       print("猜对啦,恭喜过关!\n")
   isGo_on = input("\n\n是否要继续下一关?(Y/N):")

实验六
实验要求:输入若干学生的成绩,计算所有这些学生成绩的平均分、及格率以及优秀率。其中学生成绩的个数由第一行输入的整数控制的,60分及以上者为成绩合格,85分及以上者为优秀。
例如输入:4
89
95
56
74
输出:
平均分为:78.50
及格率为:75%
优秀率为:50%

if __name__ == '__main__':
    score_list = list()
    n = int(input())
    count_1 = 0
    count_2 = 0
    for _ in range(n):
        tmp = int(input())
        if tmp >= 60:
            count_1 += 1
        if tmp >= 85:
            count_2 += 1
        score_list.append(tmp)
    total_score = sum(score_list)
    print("平均分: {:.2f}".format(sum(score_list) / len(score_list)))
    print("及格率: {:.0f}%".format((count_1 / len(score_list)) * 100))
    print("优秀率: {:.0f}%".format((count_2 / len(score_list)) * 100))
  • 4
    点赞
  • 39
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值