lbxx916 发表于 2020-6-9 22:24:21

关于大小比较操作的问题

是这样,我在写一个简单的游戏,假如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、以此类推...如果有重复的,再进行一次内部随机取值,判定谁大谁小进行进攻,对手谁数字比它小谁就扣血....
我苦思冥想不得其解,还求大佬指点,麻烦了!

小甲鱼的铁粉 发表于 2020-6-9 23:16:58

先排序,然后用三个数组,一个数字记录已经排好序的数字,另一个记录abcdef,最后一个记录分数;
楼主的意思是想要思路还是需要代码呢{:10_297:}

lbxx916 发表于 2020-6-9 23:19:17

小甲鱼的铁粉 发表于 2020-6-9 23:16
先排序,然后用三个数组,一个数字记录已经排好序的数字,另一个记录abcdef,最后一个记录分数;
楼主的意 ...

可否有空简易的写个代码,谢谢了

小甲鱼的铁粉 发表于 2020-6-9 23:21:15

lbxx916 发表于 2020-6-9 23:19
可否有空简易的写个代码,谢谢了

稍等

java2python 发表于 2020-6-9 23:23:02

查找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

小甲鱼的铁粉 发表于 2020-6-9 23:59:11

#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:42:49

本帖最后由 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()))

lbxx916 发表于 2020-6-10 16:30:00

小甲鱼的铁粉 发表于 2020-6-9 23:59
唉这个有一个漏洞,比如我输入q1 w2 e3 r4 t5 y6 u7 i8 o9 p0运行出来p就消失了,其他的分数都对,太晚了 ...

感谢了,这么晚回复

lbxx916 发表于 2020-6-10 16:30:31

Twilight6 发表于 2020-6-10 00:42
看注释吧,第一个代码是你举例子的卡片值,第二个代码是随机卡片值:




非常感谢,我现在明白了

Twilight6 发表于 2020-6-10 16:31:20

lbxx916 发表于 2020-6-10 16:30
非常感谢,我现在明白了

没事我写的代码一点不简洁,辛苦了~

小甲鱼的铁粉 发表于 2020-6-10 19:35:23

Twilight6 发表于 2020-6-10 16:31
没事我写的代码一点不简洁,辛苦了~

我的最佳没了{:10_266:}

Twilight6 发表于 2020-6-10 19:44:29

小甲鱼的铁粉 发表于 2020-6-10 19:35
我的最佳没了

哈哈不是主要是楼主是要Python 的
页: [1]
查看完整版本: 关于大小比较操作的问题