我正在练习写一个掷骰子的。我已经尝试过try、while和while,但是它们都没有按照我的预期工作--在询问用户是否想继续之前,我想检查一下用户输入是否有效,如果不是,就返回user_number1。我是不是从错误的角度看这件事?我能用这个做什么?对于这个可能很愚蠢的问题,我很抱歉,我对此还很陌生。
import random
print("Welcome to the dice roller!")
def roller():
user_number1 = input("Please input the dice you want to use in the following format: XdY > ")
user_number_fin = user_number1.split("d")
num1 = int(user_number_fin[0])
num2 = int(user_number_fin[1])
if num1 == 1:
result1 = random.randint(num1, num1*num2)
print("Your roll is: " + str(result1) + " (" + str(num1) + "d" + str(num2) + ")" )
else:
dice_number = 1
list_of_results = []
while dice_number <= num1:
result2 = random.randint(num1, num2)
list_of_results.append(result2)
dice_number += 1
print("Your roll is: " + str(sum(list_of_results)) + " (" + str(num1) + "d" + str(num2) + ", " + str(list_of_results)+ ")")
def shouldi():
roller()
usercont = input("Do you want to continue? y/n > ")
while usercont in ["Y", "y"]:
roller()
usercont = input("Do you want to continue? y/n > ")
if usercont in ["N", "n"]:
print("Thank you for using the dice roller. Bye!")
quit()
else:
print("That is not a valid input.")
usercont
发布于 2018-07-14 03:38:40
下面是使用正则表达式的另一种方法。如果你习惯使用正则表达式,那么我更喜欢使用正则表达式而不是这个。这只是一种替代方法。
def roller():
user_number1 = input("Please input the dice you want to use in the following format: XdY > ")
if("d" in user_number1):
if(len(user_number1) == 3):
user_number_fin = user_number1.split("d")
num1 = int(user_number_fin[0])
num2 = int(user_number_fin[1])
else:
print("Your input not in valid format. Use the format XdX")
发布于 2018-07-14 03:51:33
您可以使用正则表达式并编写一个执行所需操作的函数,然后可以在roller()
函数中使用它:
import re
def get_number():
user_number1 = input("Please input the dice you want to use in the following format: XdY > ")
user_number_fin = re.match("^(\\d*)d(\\d+)$",user_number1,re.I)
if not user_number_fin: get_number()
if user_number_fin.group(1) =='': num1 = 1
else: num1 = int(user_number_fin.group(1))
num2 = int(user_number_fin.group(2))
if num1>num2:
print("\n\tSorry--side to roll must be less than the number of sides!!")
get_number()
return {'num1':num1,'num2':num2}
这可以接受d4
,即如果没有被指定为1,则采用缺省边,并且不能接受4d3
,即要滚动的边必须少于骰子中存在的边的数量。
https://stackoverflow.com/questions/51330599
复制相似问题