python高级语言设计我是卧底_python谁是卧底、猜词语

python谁是卧底

谁是卧底也是深受很多人喜欢的游戏,起码要三人以上才能玩,大致分为几个阶段:

1.分配平民词语和卧底词语—>

2.玩家依次发言—>

3.根据发言投票认为谁是卧底—>

4.得到票数最多的玩家出局—>

5.出局玩家刚好是卧底则平民胜利,如果出局玩家是平民则被冤死并继续第2步,当剩下的平民只有1个时卧底胜利。

特殊情况是,出现两名或以上的玩家票数相同,则相同票数的玩家重新发言,然后全体针对这几个玩家投票。

程序设计思想:输入玩家数num,玩家编号为0~num-1,然后定义三个含有num个元素的列表:词语列表,计算玩家票数的列表,死亡玩家的列表。列表下标从0~num-1,随机产生该区间的数x,代表x号玩家是卧底,然后分配卧底词和平民词。注意,提示几号玩家是卧底或冤死的时候,要将打印信息时候的下标加1,比如下标数0代表的其实是1号玩家。

在每轮游戏中,依次进行发言,投票,票数最多的玩家出局(出现相同票数则重新发言),出局玩家归入死亡玩家列表。然后开始下一轮。

那么,如果有num位玩家,则最多有多少轮游戏结束?因为进行到只有2位玩家游戏就结束了,所以答案是num-2轮!也就是说上述流程要循环num-2次。

编程思想定了就可以敲代码了,程序代码如下:num = int(input('请输入玩家数:>=3 \n'))

if num 

print('人数不够,请输入>=3的人数')

#生成一个随机数,指定卧底

import random

wodi = random.randint(1,num)  #第几个人是卧底

print(wodi)

word = []  #给他们指定身份列表

for i in range(1,num+1):

word.append('平民')

if i == wodi:

word[i-1] = '卧底'

print(word)

vote = []  #投票列表。判断最高票数

dead = []  #死亡列表,已死的平民

#初始化列表

for i in range(0,num):

vote.append(0)

dead.append(num+10)

#samevote是判断有没有同样最高票数,wodiwin判断卧底赢了没

wodi_win = 0

#投票环节

def all_vote(num,ifMax):

#第一步清空投票池

for j in range(0, num):

vote[j] = 0

#第二部相同最高票数则只能针对最高票数投票,否则直接投票

for j in range(0, num):

if (j not in dead):

if ifMax:

vote2p = int(input('请%d号玩家投票,只能针对最高票数的几位\n' % (j + 1))) - 1

else:

vote2p = int(input('请%d号玩家投票\n' % (j + 1))) - 1

vote[vote2p] += 1

for x in range(0, num - 1):

for k in range(0, num):

if (k not in dead):

print('%d号玩家发言时间' % (k + 1))

print('发言环节结束')

# 将各位玩家的票数置0

all_vote(num,0)

for y in range(0, num):

if ((vote[y] == max(vote)) & (y != vote.index(max(vote)))):

print('不止一位玩家得到最高票数,请这些玩家重新发言')

all_vote(num,1)

#第几位死亡,则加入死亡列表,死的是卧底则游戏结束,否则继续

dead[x] = vote.index(max(vote))

print(vote)

if (dead[x]+1 == wodi):

print('卧底得到最多票数,游戏结束')

wodi_win = 1

break

print('%d号玩家被冤死!' % (dead[x] + 1))

# 游戏结束

if (wodi_win == 0):

print('只剩两名玩家,卧底胜利!')

猜词语

电视节目中的”你来比划我来猜“大家应该都看过,而且很多人也玩过,

规则就是一个人看词语比划相应动作和说一些提示,

另一个人看不到词语要通过比划的动作猜出来,猜的过程中主持人判断是否符合规则。

程序设计思想:输入Num组玩家,然后给定词语,5个词语为一组,猜对则bouns+1,

60s时间到或者玩家跳过则跳到下一个,5个词语猜完计算答对数目以及时间,最后判断哪组获得胜利

设定一个裁判组,有一个生成词组方法,一个判断对错方法,一个计算得分方法

一个玩家组,有一个输入答案方法

以下是代码:import random

import time

#给定词语列表,然后随机生成其中五个

list_all = ['对牛弹琴','冰糖葫芦','刻舟求剑','口红','七上八下',

'放风筝','台灯','钻戒','三头六臂','愚公移山','乌鸦喝水',

'如来神掌','跑步','火车',

'仙人掌','捧腹大笑','画蛇添足','一手遮天','掩耳盗铃']

class Judge(object):

list_word = []  #生成的词语列表

#答对的词语数,答完总共的时间

answer_num = 0

answer_time = 0

def __init__(self,num):

self.num = num

#创建词组

@classmethod

def creat(cls):

if cls.list_word:

cls.list_word = []

while len(cls.list_word)<5:

word = random.choice(list_all)

if word not in cls.list_word:

cls.list_word.append(word)

@classmethod  #判断输入答案对错,返回布尔值

def judge_true(cls,num,input_word):

if cls.list_word[num] == input_word:

return 1

else:

return 0

#计算得分

@classmethod

def score(cls,answer_num,answer_time):

score = answer_num*10 + int((300-answer_time)/10)

return score

class Player():

def __init__(self):

pass

#输入答案

@classmethod

def answer(cls):

string1 = input('输入你的答案:\n')

return string1

if __name__ == '__main__':

num_players = int(input('输入玩家组数:\n'))

#开始你划我猜

for i in range(0,num_players):

#生成裁判以及玩家组

judge = Judge(i)

judge.creat()

print(judge.list_word)

player = Player()

#计算时间用

start = time.time()

for k in range(0,5):

# 计算时间用

end = time.time()

sec = end - start

# 判断对错,统计用时

string1 = player.answer()

#答对答错都进入下一题

if judge.judge_true(k,string1):

judge.answer_num += 1

judge.answer_time += sec

else:

print('输入错误下一题\n')

judge.answer_time += sec

break

#一道题时间为60秒

if sec>=60:

print('输入超时,下一题')

break

#k=4时答题结束,计算第i组得分值

if k >=4 :

print('第%d组得分为%d'%(i,judge.score(judge.answer_num,judge.answer_time)))

猜数字

很多人在聚餐时都玩过猜数字游戏,由某人随机出一个指定范围内的数,然后其他人一个一个猜,猜的过程中区间不断缩小,直到猜中为止。import random

secret = random.randint(1,10)

#print(secret)

print('------猜数字游戏!-----')

guess = 0

while guess != secret:

temp = input('猜数字游戏开始,请输入数字:')

guess = int(temp)

if guess > secret:

print('您输入的数字大了!')

else:

print('您输入的数字小了!')

if guess == secret:

print('恭喜,您猜对了!')

print('游戏结束,再见!^_^')

#用一行代码实现数值交换:a = 1

b = 2

a,b=b,a

print(a,b)

#如何用一行代码生成[1,4,9,16,25,36,49,64,81,100] ?list_hang = [i*i for i in range(1,11)]

print(list_hang)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值