关于大小比较操作的问题
是这样,我在写一个简单的游戏,假如A,B,C与D,E,F是对手,他们每个人持有一个数字,A:5,B:4,C:7,D:1,E:9,F:4,要实现的操作有:1、先判定谁的数字最大,谁就先发起进攻(这里是E先发起进攻,对手人员比自己数字少的A,B,C生命减少9)
2、判定第数字第二大的发起进攻的,比它数字小的都减少生命(这里第2人为C,D,F生命减少7)
3、以此类推...如果有重复的,再进行一次内部随机取值,判定谁大谁小进行进攻,对手谁数字比它小谁就扣血....
我苦思冥想不得其解,还求大佬指点,麻烦了!
先排序,然后用三个数组,一个数字记录已经排好序的数字,另一个记录abcdef,最后一个记录分数;
楼主的意思是想要思路还是需要代码呢{:10_297:} 小甲鱼的铁粉 发表于 2020-6-9 23:16
先排序,然后用三个数组,一个数字记录已经排好序的数字,另一个记录abcdef,最后一个记录分数;
楼主的意 ...
可否有空简易的写个代码,谢谢了 lbxx916 发表于 2020-6-9 23:19
可否有空简易的写个代码,谢谢了
稍等 查找python类排序,CSDN上拷贝来的:
class OB():
def __init__(self,num):
self.num = num
def __lt__(self,other):
return self.num<other.num
l =
l.sort()
print()
#输出结果:
#————————————————
#版权声明:本文为CSDN博主「geek_hch」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
#原文链接:https://blog.csdn.net/geek_hch/java/article/details/88614698 #include<stdio.h>
#include<stdlib.h>
int main(void)
{
int a={0},b={0},temp,flag,n;//a记录字母对应的数字,b记录分数
char ch,x;
for(int i=0;i<10;i++)
{
printf("请输入%d个代号以及他们的数字\n",10-i);
scanf("%c%d",&ch,&a);
x=getchar();//吃掉空格
n=i;//记录个数
}
//泡沫排序法对数字和对应的字母排序
for(int i=0;i<=10;i++)
{
for(int j=0;j<=10-i;j++)
{
if(a<=a)
{ //数字排序
temp=a;
a=a;
a=temp;
//字母根据数字大小排序
flag=ch;
ch=ch;
ch=flag;
}
}
}
//开始小的扣生命值
for(int i=0;i<n;i++)
{
for(int j=i+1;j<n;j++)
{
b=b-a;
}
}
printf("他们的血量为\n");
for(int i=0;i<n;i++)
printf("%c血量为%d\n",ch,b);
system("pause");
return 0;
}
唉这个有一个漏洞,比如我输入q1 w2 e3 r4 t5 y6 u7 i8 o9 p0运行出来p就消失了,其他的分数都对,太晚了不想调试了,早点睡,晚安 本帖最后由 Twilight6 于 2020-6-10 00:48 编辑
看注释吧,第一个代码是你举例子的卡片值,第二个代码是随机卡片值:
from random import choice
team1 = [('A', 5), ('B', 4), ('C', 7)]# 队伍 1
team2 = [('D', 1), ('E', 9), ('F', 4)]# 队伍 2
number = {}.fromkeys( for i in team1 + team2], 50)# 初始化各个人的生命值为 50
sort_number = sorted(team1 + team2, key=lambda x: x)[::-1]# 大小排序
over = []# 记录已经攻击过的人员
for i in range(len(sort_number) - 1):
if sort_number in over:# 判断是否已经参与过比较
continue
temp = ]
while True:# 循环判断卡片数值大小是否相等
if sort_number != sort_number:# 不相等就退出循环
break
temp.append(sort_number)# 大小相等加入列表,待 choice 随机选择进行攻击
i += 1
while temp != []:
win = 0# 用于判断是否进行过攻击,若为0则没有进行过攻击
random_men = choice(temp)# 从数字排相等的人中随机挑选一个出来攻击
over.append(random_men) # 加入已经攻击的列表
temp.remove(random_men)# 移除本次选中的人,因为怕会有大于 2 个人的情况
print(f'------{random_men}的回合------'.center(38))
if random_men in team1:# 判断是队伍 1 的人攻击 还是 队伍 2的人攻击
for i in team2:
if i < random_men: # 判断卡片是否比攻击人小
win = 1 # 用于记录该人进行过攻击
number] -= random_men # 减少生命值
print(
f'{i}所持有的卡片数字为{i}小于{random_men}的卡片数{random_men},{i}的生命值-{random_men},剩余{number]}')
elif random_men in team2:# 和上面同理,其实这里可以用 else
for i in team1:
if i < random_men:
win = 1
number] -= random_men
print(f'{i}所持有的卡片数字为{i}小于{random_men}的卡片数{random_men},{i}的生命值-{random_men},剩余{number]}')
if win == 0:
print(f'对手的卡片没有人比{random_men}小,因此跳过{random_men}的攻击回合')
print('剩余的生命值情况:A:{},B:{},C:{},D:{},E:{},F:{}'.format(*number.values()))
from random import choice,randint
team1 = [('A',randint(1,10)),('B',randint(1,10)),('C',randint(1,10))] # 队伍 1
team2 = [('D',randint(1,10)),('E',randint(1,10)),('F',randint(1,10))] # 队伍 2
number = {}.fromkeys( for i in team1+team2],50)# 初始化各个人的生命值为 50
sort_number = sorted(team1+team2,key=lambda x:x)[::-1] # 大小排序
over = [] # 记录已经攻击过的人员
for i in range(len(sort_number)-1):
if sort_number in over:# 判断是否已经参与过比较
continue
temp = ]
while True: # 循环判断卡片数值大小是否相等
if sort_number != sort_number: # 不相等就退出循环
break
temp.append(sort_number) # 大小相等加入列表,待 choice 随机选择进行攻击
i += 1
while temp != []:
win = 0
random_men = choice(temp)
over.append(random_men)
temp.remove(random_men)
print(f'------{random_men}的回合------'.center(38))
if random_men in team1:
for i in team2:
if i < random_men:
win = 1
number] -= random_men
print(f'{i}所持有的卡片数字为{i}小于{random_men}的卡片数{random_men},{i}的生命值-{random_men},剩余{number]}')
elif random_men in team2:
for i in team1:
if i < random_men:
win = 1
number] -= random_men
print(f'{i}所持有的卡片数字为{i}小于{random_men}的卡片数{random_men},{i}的生命值-{random_men},剩余{number]}')
if win == 0:
print(f'对手的卡片没有人比{random_men}小,因此跳过{random_men}的攻击回合')
print('剩余的生命值情况:A:{},B:{},C:{},D:{},E:{},F:{}'.format(*number.values())) 小甲鱼的铁粉 发表于 2020-6-9 23:59
唉这个有一个漏洞,比如我输入q1 w2 e3 r4 t5 y6 u7 i8 o9 p0运行出来p就消失了,其他的分数都对,太晚了 ...
感谢了,这么晚回复 Twilight6 发表于 2020-6-10 00:42
看注释吧,第一个代码是你举例子的卡片值,第二个代码是随机卡片值:
非常感谢,我现在明白了 lbxx916 发表于 2020-6-10 16:30
非常感谢,我现在明白了
没事我写的代码一点不简洁,辛苦了~ Twilight6 发表于 2020-6-10 16:31
没事我写的代码一点不简洁,辛苦了~
我的最佳没了{:10_266:} 小甲鱼的铁粉 发表于 2020-6-10 19:35
我的最佳没了
哈哈不是主要是楼主是要Python 的
页:
[1]