【问题标题】:What is wrong with my dice rolling program?我的掷骰子程序有什么问题?
【发布时间】:2016-11-21 03:08:49
【问题描述】:

我是 python 新手,我正在尝试制作一个基本的骰子滚动程序,但是当我运行该程序时,它从不显示骰子图片。图片是看起来像骰子的东西,我不是要导入图片。这是我的代码

leaveprogram = 0
from random import randint
uniform = 0
random = 0
while leaveprogram != "q":
    print ("Dice Rolling Program")
    print ("press enter to roll")
    input()
    number = randint(1, 6)
if number == 1:
    print("[-----------]")
    print("[           ]") 
    print("[     o     ]")
    print("[           ]")
    print("[-----------]")
    leaveprogram=input()
if number == 2:
    print ("[-----------]")
    print ("[           ]")
    print ("[    o o    ]")
    print ("[           ]")
    print ("[-----------]")
    leaveprogram=input()
if number == 3:
    print ("[-----------]")
    print ("[    o o    ]")
    print ("[     o     ]")
    print ("[           ]")
    print ("[-----------]")
    leaveprogram=input()
if number == 4:
    print ("[-----------]")
    print ("[    o o    ]")
    print ("[    o o    ]")
    print ("[           ]")
    print ("[-----------]")
    leaveprogram=input()
if number == 5:
    print ("[-----------]")
    print ("[  o     o  ]")
    print ("[     o     ]")
    print ("[  o     o  ]")
    print ("[-----------]")
    leaveprogram=input()
if number == 6:
    print ("[-----------]")
    print ("[  o     o  ]")
    print ("[  o     o  ]")
    print ("[  o     o  ]")
    print ("[-----------]")
    leaveprogram=input()

【问题讨论】:

  • 你的缩进错误。
  • 具体来说,您需要缩进所有if 语句,以便它们在while 循环中执行。
  • 您的 if 语句应该在 while 循环内(缩进正确)。你也不需要多个prints 来做到这一点。你可以使用print(''' stuff here with line breaks ''')。三引号允许在print 函数中使用多行字符串。
  • 感谢您的@WarrenWeckesser,但是当我缩进所有“if”语句时,然后将下面的所有语句加倍缩进,直到下一个“if”语句,表示“未缩进与任何其他缩进级别不匹配"。
  • 确保使用一致的缩进,不要混用制表符和空格。看看到目前为止给出的答案。

标签: python dice


【解决方案1】:

在 python 中,缩进决定了循环或条件的范围。 你的 if 语句应该像这样缩进:

leaveprogram = 0
from random import randint
uniform = 0
random = 0
while leaveprogram != "q":
    print ("Dice Rolling Program")
    print ("press enter to roll")
    input()
    number = randint(1, 6)
    if number == 1:
        print("[-----------]")
        print("[           ]") 
        print("[     o     ]")
        print("[           ]")
        print("[-----------]")
        leaveprogram=input()
. . .

【讨论】:

    【解决方案2】:

    您需要更正缩进,并且您不需要在每个if 条件下都输入leaveprogram

    from random import randint
    leaveprogram = 0
    uniform = 0
    random = 0
    while leaveprogram != "q":
        print ("Dice Rolling Program")
        print ("press enter to roll")
        leaveprogram=input()
        number = randint(1, 6)
        if number == 1:
            print("[-----------]")
            print("[           ]") 
            print("[     o     ]")
            print("[           ]")
            print("[-----------]")
        if number == 2:
            print ("[-----------]")
            print ("[           ]")
            print ("[    o o    ]")
            print ("[           ]")
            print ("[-----------]")
        if number == 3:
            print ("[-----------]")
            print ("[    o o    ]")
            print ("[     o     ]")
            print ("[           ]")
            print ("[-----------]")
        if number == 4:
            print ("[-----------]")
            print ("[    o o    ]")
            print ("[    o o    ]")
            print ("[           ]")
            print ("[-----------]")
        if number == 5:
            print ("[-----------]")
            print ("[  o     o  ]")
            print ("[     o     ]")
            print ("[  o     o  ]")
            print ("[-----------]")
        if number == 6:
            print ("[-----------]")
            print ("[  o     o  ]")
            print ("[  o     o  ]")
            print ("[  o     o  ]")
            print ("[-----------]")
    

    【讨论】:

      【解决方案3】:

      除了缩进问题之外,您可能还想通过创建一个字符串数组来重构您的代码,每个骰子一个,并用一行代码替换级联的if 语句。一种方法是利用 Python 三引号字符串文字以及split() 方法:

      diceString = """
      ***************
      [-----------]
      [           ] 
      [     o     ]
      [           ]
      [-----------]
      ***************
      [-----------]
      [           ]
      [    o o    ]
      [           ]
      [-----------]
      ***************
      [-----------]
      [    o o    ]
      [     o     ]
      [           ]
      [-----------]
      ***************
      [-----------]
      [    o o    ]
      [    o o    ]
      [           ]
      [-----------]
      ***************
      [-----------]
      [  o     o  ]
      [     o     ]
      [  o     o  ]
      [-----------]
      ***************
      [-----------]
      [  o     o  ]
      [  o     o  ]
      [  o     o  ]
      [-----------]"""
      
      die = diceString.split("\n***************\n")
      

      这具有使die[0] 成为空字符串的良好副作用,因此您感兴趣的字符串从索引1 开始并且始终对应于骰子上的数字。如果你走这条路,那么if 语句的整个级联可以被单行替换:

      print(die[number])
      

      【讨论】:

        猜你喜欢
        • 2012-09-16
        • 1970-01-01
        • 2014-05-12
        • 2014-04-21
        • 1970-01-01
        • 2014-05-12
        • 1970-01-01
        • 2013-11-01
        • 1970-01-01
        相关资源
        最近更新 更多