2016-01-27 33 views
-1
import random 
total = [0] 
one = 0 
two = 0 
three = 0 
four = 0 
five = 0 
six = 0 

dice=True 
while dice: 
a = random.randrange(1,7) 
if a == 1: 
    one = one + 1 
elif a == 2: 
    two = two + 1 
elif a == 3: 
    three = three + 1 
elif a == 4: 
    four = four + 1 
elif a == 5: 
    five = five + 1 
elif a == 6: 
    six = six + 1 


b = len(total) 
print ("Roll:", b,) 
print ("The dice has rolled:",a,) 
total.append (a) 




dice =input("Roll again? (y,n):") 
if dice == "n": 
    print ("Thank-You!") 
    print ("One rolled",one,"times") 
    print ("Two rolled",two,"times") 
    print ("Three rolled",three,"times") 
    print ("Four rolled",four,"times") 
    print ("Five rolled",five,"times") 
    print ("Six rolled",six,"times") 

    break 

我怎样才能使它取代“倍”,这样,如果“一”只用了滚动“一旦”它说:“一个已经铺开的时间”,而不是“一个已经滚过1次“?如何用“时间”取决于输出

谢谢。一个解释也很好,所以我可以学习

+1

这真的很简单。如果一个== 1:打印(“One滚动1次”。)else:print(“One roll”,one,“times”)' – DJMcMayhem

+1

你能否诚实地想到一个方法来启动这个? – jonrsharpe

+0

@DJMcMayhem谢谢,我想到了,但只是做了一些小小的错误。是否有一种方法只做一次,以便代码不会混杂大量if语句,只有一个六位? – potatomeister

回答

1

建立一个叫做printTimesRolled或类似的功能。然后传递一个字符串和一个int。就像这样:

def printTimesRolled(numberWord, timesRolled): 
    if (timesRolled == 1): 
     print(numberWord, "rolled 1 time.") 
    else: 
     print(numberWord, "rolled", timesRolled, "times.") 

然后,全部打印出来,只是做到这一点:

printTimesRolled("One", one) 
printTimesRolled("Two", two) 
... 
+0

感谢兄弟:D。这有助于学习下一个主题的功能:D。 – potatomeister

1

您可以使用str.format并检查号码是否已经滚动一次。演示:

>>> one = 1 
>>> 'One rolled {} time{}'.format(one, 's' if one!=1 else '') 
'One rolled 1 time' 
>>> one = 0 
>>> 'One rolled {} time{}'.format(one, 's' if one!=1 else '') 
'One rolled 0 times' 
>>> one = 3 
>>> 'One rolled {} time{}'.format(one, 's' if one!=1 else '') 
'One rolled 3 times' 
0

这将是一个很好的方式来处理骰子滚动。我不确定您是否已经开始探索课程,但是通过制作DiceRoller类,您可以使其稍微更有条理。此外,您可以避免大量的全局变量。

使用字典进行比较将允许您运行for循环来比较它,而不是使用6个elif语句,从而使代码更有效。

最后,当用户键入“n”退出并检查他的卷时,我们将其与again.lower()进行比较,以防止用户输入“N”。

然后它遍历字典并根据简单的if语句打印'time/roll'或'times/roll'。

我希望这对你有意义,如果不是只是问!

import random 

# DEFINING THE CLASS 
class DiceRoller(object): 
    def __init__(self): 
     self.sides = {1:0, 
         2:0, 
         3:0, 
         4:0, 
         5:0, 
         6:0} 

    # WILL ROLL THE DICE AND ADD 1 TO THE SIDE COUNTER WHEN A SIDE IS ROLLED 
    def rollTheDice(self): 
     roll = random.randint(1,6) 

     for side in (self.sides): 
      if roll == side: 
       self.sides[side] += 1 

     print('Rolled a %s' % (roll)) 

    # WILL PRINT TOTAL ROLLS WHEN CALLED 
    def getTotals(self): 
     for i, side in enumerate(self.sides): 
      if self.sides[side] == 1: 
       print('Side %s: %s roll' % (i + 1, self.sides[side])) 
      else: 
       print('Side %s: %s rolls' % (i + 1, self.sides[side])) 


# THIS CODE IS EXECUTED 
Dice = DiceRoller() 

while True: 
    Dice.rollTheDice() 
    again = input('Roll again [y/n]: ') 

    if again.lower() == 'n': 
     break 

Dice.getTotals() 

此代码将运行几次时,以下几点:

Rolled a 2 
Roll again [y/n]: y 
Rolled a 4 
Roll again [y/n]: y 
Rolled a 3 
Roll again [y/n]: y 
Rolled a 1 
Roll again [y/n]: y 
Rolled a 4 
Roll again [y/n]: y 
Rolled a 2 
Roll again [y/n]: n 
Side 1: 1 roll 
Side 2: 2 rolls 
Side 3: 1 roll 
Side 4: 2 rolls 
Side 5: 0 rolls 
Side 6: 0 rolls 

Process finished with exit code 0