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

Python 3 random.randint() only returning 1's and 2's

我以为我终于解决了我为练习而写的掷骰子代码中的所有问题,但显然我昨晚忘了保存我的工作,今天下午重写时,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()

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

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