artais 2023-03-28 14:19 采纳率: 63.2%
浏览 142
已结题

c语言与Python的代码转换

请将这段C语言代码按照相同的算法转换为Python代码,能够得到,并给出注释


 #include<time.h> 
#include<stdlib.h> 
#include<stdio.h>
   
   int Py(const void *a,const void *b)
   {
       return *(int *)a-*(int *)b;
   }
  
 void SJS(int p[])//主办方产生随机数
 {
     int i,j,k,c=0; 
     srand((int)time(0));
      k=1+(int)(22.0*rand()/(RAND_MAX+1.0)); 
     for(i=0;i<=5;) 
      {
        k=1+(int)(22.0*rand()/(RAND_MAX+1.0)); 
          for(j=0;j<i;j++)
          {
             if(k==p[j])
                  break;
          }
         if(j>=i)
          {
             p[i]=k;
              i++;
          }
     }     
  }
  
 void Select(int f[])//抽奖 5个数
  {
      printf("请从1~22之间任意选取5个不同的整数作为投注号码:\n");
      int i=0,j,k=0;
      for(i=0;i<5;i++)
         scanf("%d",&f[i]);
     qsort(f,5,sizeof(f[0]),Py);
     while(!k)
      {
          for(i=0;i<5;i++)
             if(f[i]<1||f[i]>22)
             { 
                k=0; 
                 break;
             }
             if(i>=5)  k=1;
             if(k)
             {
                for(j=1;j<5;j++)
                     if(f[j]==f[j-1])
                     {
                         k=0;
                         break;
                     }
                     if(j==5) k=1;
             }
             
           if(k==0)
             {
                  printf("输入错误!请从1~22之间任意选取5个不同的整数作为投注号码:\n");
                  for(i=0;i<5;i++)
                      scanf("%d",&f[i]);
                 qsort(f,5,sizeof(f[0]),Py);
             }
     }
  }
  
 int check(int p[],int f[])
 {
     int i,j,count=0,k=0;//k标记是否抽到与 p[5] 相等的数
     
     for(i=0;i<5;i++)//对比
     {
          for(j=0;j<5;j++)
              if(f[i]==p[j])
              {count++;break;}
      }
    for(i=0;i<5;i++)
         if(f[i]==p[5])
          {k=1;break;}
          
         if(count==5)//头等奖
             return 1;
         else if(count==4 && k)//二等奖
              return 2;
          else if(count==4 && !k)//三等奖
              return 3;
         else if(count==3)//四等奖
              return 4;
         else if(count==2)//五等奖
             return 5;
          else
             return 0;
 }
  void win(int k)
  {
      if(k==1)
         printf("恭喜你!!!中了头等大奖!\n");
     else if(k==2)         
     printf("恭喜你!!!中了二等大奖!\n");
    else if(k==3)
         printf("恭喜你!!!中了三等大奖!\n");
     else if(k==4)
         printf("恭喜你!!!中了四等大奖!\n");
     else if(k==5)
         printf("恭喜你!!!中了五等大奖!\n");
     else
        printf("本次未中奖,谢谢参与!祝你下次好运!\n");
 }
 void print()
 {
     printf("------------操作------------\n");
    printf("|抽奖,            请选择1 |\n");
    printf("|大奖设置,        请选择2 |\n");
     printf("|退出本期抽奖,    请选择0 |\n");
    printf("----------------------------\n");
     
 }
 
 int main() 
 { 
     int f[5],i,k,h,Case=1,y;
     int P[6];
          printf("                          ********************************\n");
    printf("                          *         大奖等你拿!!!        *\n");
     printf("                          ********************************\n");
     printf("\n\n");
     while(1)
     {
         printf("*************************************第%d期抽奖**********************************\n",Case);
         printf("选择1    开始\n");
         printf("选择0    退出\n");
         printf("选择:");
         scanf("%d",&y);

         if(y==0) break;
         else if(y==1)
         {
             SJS(P);//主办方的随机数
             Case++;
             while(1)
             {
                 print();
                 printf("请选择:");
               scanf("%d",&h);
                 if(h==0)
                 {
                     printf("本期抽奖结束!!!\n");
                     printf("大奖号为:");
                     for(i=0;i<5;i++)
                         printf("%d  ",P[i]);
                    printf("特别号为:");
                     printf("%d\n",P[5]);
                   break;
                 }
                 else if(h==1)
                 {
                     
                     Select(f);//抽奖
                    k=check(P,f);
                    win(k);
               }
                 else if(h==2)
                 {
                     printf("---------兑--------奖----------方-----------式----------\n");
                     printf("|头等奖:5个号码与5个暗码完全相同                        |\n");
                    printf("|二等奖:4个号码与4个暗码完全相同,另一个号码与特别号相同|\n");
                     printf("|三等奖:4个号码与4个暗码完全相同,另一个号码与特别号不同|\n");
                     printf("|四等奖:3个号码与3个暗码完全相同                        |\n");
                     printf("|五等奖:2个号码与2个暗码完全相同                        |\n");
                     printf("|大奖号码将在本期结束公布                               |\n");
                     printf("---------------------------------------------------------\n");
                }
             }
         }
     }
     printf("结束,谢谢参与!!!\n");
     return 0;    
} 

img

img

  • 写回答

5条回答 默认 最新

  • 极客智能体-在线 2023-03-28 22:45
    关注
    获得7.50元问题酬金

    以下答案由GPT-3.5大模型与博主波罗歌共同编写:
    在Python中,没有与C语言中的qsort功能完全相同的函数,因此需要手动实现类似的排序功能。以下是将C语言代码转换为Python代码的过程:

    import random
    import time
    
    def py(a, b):
        """已黑化的小白     功能:用于qsort排序,对比两个数的大小
        返回值:a-b
        """已黑化的小白     return a - b
    
    def sjs(p):
        """已黑化的小白     功能:主办方产生随机数
        参数:p为数组,用于存储生成的随机数
        """已黑化的小白     i = 0
        while i <= 5:
            k = random.randint(1, 22)
            if k not in p:
                p[i] = k
                i += 1
    
    def select(f):
        """已黑化的小白     功能:用户输入5个不同的整数作为投注号码,并进行输入值的验证
        参数:f为数组,用于存储用户输入的5个数
        """已黑化的小白     print("请从1~22之间任意选取5个不同的整数作为投注号码:")
        # 输入五个数,并排序
        for i in range(5):
            f[i] = int(input())
        f.sort()
        
        # 对输入值进行验证
        while True:
            k = True
            # 判断范围是否在1~22之间
            if any(num < 1 or num > 22 for num in f):
                k = False
            # 判断输入的五个数是否不同
            if len(set(f)) < 5:
                k = False
            # 如果有不符合要求的值,则重新输入
            if not k:
                print("输入错误!请从1~22之间任意选取5个不同的整数作为投注号码:")
                for i in range(5):
                    f[i] = int(input())
                f.sort()
            else:
                break
            
    def check(p, f):
        """已黑化的小白     功能:判断中奖情况
        参数:p为主办方生成的随机数组,f为用户输入的投注数组
        返回值:中奖情况1~5表示五个级别的奖项,0为未中奖
        """已黑化的小白     count = 0
        k = False
        for i in range(5):
            if f[i] in p:
                count += 1
        if f.count(p[5]) > 0:
            k = True
        # 根据规则判断中奖情况
        if count == 5:
            return 1
        elif count == 4 and k:
            return 2
        elif count == 4 and not k:
            return 3
        elif count == 3:
            return 4
        elif count == 2:
            return 5
        else:
            return 0
        
    def win(k):
        """已黑化的小白     功能:根据中奖情况输出中奖信息
        参数:k为中奖情况
        """已黑化的小白     if k == 1:
            print("恭喜你!!!中了头等大奖!")
        elif k == 2:
            print("恭喜你!!!中了二等大奖!")
        elif k == 3:
            print("恭喜你!!!中了三等大奖!")
        elif k == 4:
            print("恭喜你!!!中了四等大奖!")
        elif k == 5:
            print("恭喜你!!!中了五等大奖!")
        else:
            print("本次未中奖,谢谢参与!祝你下次好运!")
        
    def print_opt():
        """已黑化的小白     功能:输出操作菜单
        """已黑化的小白     print("------------操作------------")
        print("|抽奖,            请选择1 |")
        print("|大奖设置,        请选择2 |")
        print("|退出本期抽奖,    请选择0 |")
        print("----------------------------")
        
    def main():
        """已黑化的小白     主函数
        """已黑化的小白     f = [0] * 5
        P = [0] * 6
        Case = 1
        print("*************************************第%d期抽奖**********************************" % Case)
        print("选择1    开始")
        print("选择0    退出")
        y = int(input("选择:"))
        while True:
            if y == 0:
                break
            elif y == 1:
                sjs(P)
                Case += 1
                while True:
                    print_opt()
                    h = int(input("请选择:"))
                    if h == 0:
                        print("本期抽奖结束!!!")
                        print("大奖号为:", end="")
                        print(*P[:5], sep="  ")
                        print("特别号为:%d" % P[5])
                        break
                    elif h == 1:
                        select(f)
                        k = check(P, f)
                        win(k)
                    elif h == 2:
                        print("---------兑--------奖----------方-----------式----------")
                        print("|头等奖:5个号码与5个暗码完全相同                        |")
                        print("|二等奖:4个号码与4个暗码完全相同,另一个号码与特别号相同|")
                        print("|三等奖:4个号码与4个暗码完全相同,另一个号码与特别号不同|")
                        print("|四等奖:3个号码与3个暗码完全相同                        |")
                        print("|五等奖:2个号码与2个暗码完全相同                        |")
                        print("|大奖号码将在本期结束公布                               |")
                        print("---------------------------------------------------------")
        print("结束,谢谢参与!!!")
    
    if __name__ == '__main__':
        main()
    

    需要注意的是,在Python中,输入不需要使用scanf和指针,而是直接使用input函数读入即可。同时,Python中也没有switch-case语句,因此需要使用if-elif-else语句。另外,列表的下标从0开始,因此需要改变循环的起始位置。
    如果我的回答解决了您的问题,请采纳!

    评论

报告相同问题?

问题事件

  • 系统已结题 4月5日
  • 创建了问题 3月28日

悬赏问题

  • ¥15 关于c++外部库文件宏的问题,求解
  • ¥15 office打开卡退(新电脑重装office系统后)
  • ¥300 FLUENT 火箭发动机燃烧EDC仿真
  • ¥15 【Hadoop 问题】Hadoop编译所遇问题hadoop-common: make failed with error code 2
  • ¥15 vb6.0+webbrowser无法加载某个网页求解
  • ¥15 RPA财务机器人采购付款流程
  • ¥15 计算机图形多边形及三次样条曲线绘制
  • ¥15 根据protues画的图用keil写程序
  • ¥200 如何使用postGis实现最短领规划?
  • ¥15 pyinstaller打包错误