Python 3 random.randint()只返回1和2

时间:2015-06-18 23:30:20

标签: function python-3.x random dice

我以为我终于解决了我为练习写的骰子滚动代码中的所有问题,但显然我昨晚忘了保存我的工作,当我今天下午重写它时,random.randint函数没有似乎还没有返回1和2之外的任何数字,之前我记得它在给出更大尺寸的骰子时会返回更高的数字。我在shell中单独运行滚动功能,它似乎工作正常,但我认为我的整体代码肯定有问题导致它将每个卷视为1d2。

import random

die = 0
num = 0

def Opening():
    print ("Welcome to the Super Deluxe Diceroller mk. 3!")
    print ("What sort of Dice would you like to roll")
    choice()

def choice():
    print ("A. d2")
    print ("B. d4")
    print ("C. d6")
    print ("D. d8")
    print ("E. d10")
    print ("F. d12")
    print ("G. d20")
    print ("H. d100")
    global sides
    die = input()
    if die == 'a' or 'A':
        sides = 2
        nombre()
    elif die == 'b' or 'B':
        sides = 4
        nombre()
    elif die == 'c' or 'C':
        sides = 6
        nombre()
    elif die == 'd' or 'D':
        sides = 8
        nombre()
    elif die == 'e' or 'E':
        sides = 10
        nombre()
    elif die == 'f' or 'F':
        sides = 12
        nombre()
    elif die == 'g' or 'G':
        sides = 20
        nombre()
    elif die == 'h' or 'H':
        sides = 100
        nombre()
    else:
        return 'Invalid'
        choice()

def nombre():
    print ("How many dice would you like to roll?")
    global num
    num = input()
    if num.isnumeric():
        roll()
    else:
        return 'Invalid'
        nombre()

def roll():
   global num
    global fortuna
    global sides
    if int(num) > 0:
        fortuna = random.randint(1,sides)
        num = int(num)
        num = num - 1
        print(fortuna)
        roll()
    else:
        retry()

def retry():
    print("Would you like to roll again? (y/n)")
    ans = input()
    if ans == 'y':
        Opening()
    elif ans == 'n':
        exit
    else:
        return 'Invalid'
        retry()       

Opening()

1 个答案:

答案 0 :(得分:0)

此行if die == 'a' or 'A':将始终返回True。这是因为项目的分组方式与if (die == 'a') or ('A'):相同,'A'(以及""以外的任何字符串)始终为True。

尝试将所有这些行更改为if die == 'a' or die == 'A":,它应该可以解决您的问题。另请参阅Truth Value Testing以获取有关此为真的原因的详细信息。