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