如何正确地为赛车模拟创建循环?

2024-05-12 13:43:26 发布

您现在位置:Python中文网/ 问答频道 /正文

我创建这段代码是为了在屏幕上模拟比赛,但在构建UI和如何继续构建时遇到了问题。我的目标是创建从0开始到20的跑步者位置。每个0代表一个在屏幕上随机运行的“R”。所以每次我按下键盘,0要么变成1要么保持在零位。我还需要帮助建立UI,以在一行4和19个破折号中建立R的起始位置。 下面是一个UI方面的示例

R-------------------------- 
R-------------------------- 
R--------------------------
R--------------------------

这是我目前的代码。多谢各位

    import random


#Create a list of the runners' positions [0,0,0,0]
runnerPos = [0,0,0,0]
raceFinished = False

  
while raceFinished == False:
  #Loop through the list, 50% chance to increase the positions runnerPos[index] += 1
    for x in range(0,4):
      if random.randint(0,1) == 0:
        runnerPos[x] += 1
  
  #loop to continue the race
 
      
    
  #Test print the list
  print(runnerPos)
  input()

一旦它到达第20位,我需要它来结束比赛,并说明哪个R赢了 我希望这是一个足够好的解释,如果不是这里有更多的细节如下

该程序将是20码短跑的简单模拟。每次您按下回车按钮,比赛将提前进行,跑步者将有50%的机会向前推进1格

要求: 赛道将由20个短划线字符(-)表示,而跑步者将由字母R表示(见下文)。 每次你按enter键,跑步者将有50%的机会向前移动。 当赛跑者到达终点时,将宣布获胜者。

Python 3.8.2(默认值,2020年2月26日,02:56:10)


Tags: theto代码falseui目标屏幕random
2条回答

您可以使用python list订阅:

from random import randint as rt

race = ['R             ',
        'R             ',
        'R             ',
        'R             ']

racing = True
while racing:
    print('\n'.join(race))
    input()
    for i in range(len(race)):
        if rt(0, 1):
            race[i] = '-' + race[i][:-1]
    for i, v in enumerate(race):
        if 'R' not in v:
            print(f'Racer number {i+1} won!')
            racing = False
            

试运行

R             
R             
R             
R             

R             
R             
-R            -
-R            -

R             
-R            -
 R            
-R            -

R             
 R            
 R            
 R            

R             
 -R           -
 R            
 R            

-R            -
 -R           -
 -R           -
 R            

 R            
  R           
  R           
 R            

 R            
  -R          -
  R           
 -R           -

 -R           -
   R          
  -R          -
 -R           -

  R           
   R          
  -R          -
  R           

  R           
   -R         -
  -R          -
  R           

  R           
    R         
   R          
  R           

  R           
    -R        -
   -R         -
  R           

  R           
     R        
   -R         -
  R           

  -R          -
     -R       -
    R         
  -R          -

   R          
      R       
    R         
  -R          -

   R          
      R       
    R         
  -R          -

   -R         -
      -R      -
    -R        -
  -R          -

    R         
       R      
     R        
  -R          -

    -R        -
       -R     -
     -R       -
   R          

    -R        -
        R     
      R       
   -R         -

    -R        -
        R     
      -R      -
    R         

     R        
        R     
      -R      -
    R         

     -R       -
        R     
       R      
    -R        -

     -R       -
        -R    -
       R      
     R        

      R       
         R    
       -R     -
     -R       -

      R       
         -R   -
        R     
      R       

      R       
         -R   -
        -R    -
      -R      -

      -R      -
         -R   -
         R    
      -R      -

       R      
         -R   -
         R    
       R      

       R      
         -R   -
         R    
       R      

       -R     -
          R   
         -R   -
       R      

        R     
          -R  -
         -R   -
       -R     -

        -R    -
           R  
         -R   -
        R     

        -R    -
           -R -
          R   
        -R    -

        -R    -
           -R -
          -R  -
         R    

        -R    -
            R 
           R  
         -R   -

        -R    -
            R 
           R  
         -R   -

         R    
            R 
           R  
         -R   -

         R    
            R 
           -R -
          R   

         -R   -
            R 
           -R -
          -R  -

         -R   -
            R 
           -R -
          -R  -

          R   
            -R-
           -R -
          -R  -

          -R  -
             R
            R 
           R  

Racer number 2 won!

您可以打印循环中已有的行。使用字符串乘法打印破折号

import random

#Create a list of the runners' positions [0,0,0,0]
runnerPos = [0,0,0,0]
raceFinished = False
  
while raceFinished == False:
  #Loop through the list, 50% chance to increase the positions runnerPos[index] += 1
    for x in range(0,4):
      if random.randint(0,1) == 0:
         runnerPos[x] += 1
      print('-'*runnerPos[x] + 'R' + '-'*(20-runnerPos[x]))
    if max(runnerPos) > 19: break
    print()
      
#Test print the list
print(runnerPos)
input()

输出

-R         -
R          
-R         -
-R         -

 R         
-R         -
-R         -
-R         -

 R         
-R         -
 R         
 R         

.......

         -R-
       -R  -
        -R -
        R  

          R
        R  
         R 
        R  

[20, 16, 18, 16]

相关问题 更多 >