我的程序askTheUser()
也按照我想要的方式运行,但我不知何故应该将其更改为包含“for”或“while”循环。有什么建议?结果结果应该是0和1的列表。例如,[1,1,1,1,1]意味着他们想重新掷骰子。
import random
def askTheUser():
userList = []
choice = input("Would you like to re-roll dice 1? If so, enter 'Yes'. If not, enter 'No'.")
if choice == str("Yes"):
userList.append(1)
else:
userList.append(0)
choice2 = input("Would you like to re-roll dice 2? If so, enter 'Yes'. If not, enter 'No'.")
if choice2 == str("Yes"):
userList.append(1)
else:
userList.append(0)
choice3 = input("Would you like to re-roll dice 3? If so, enter 'Yes'. If not, enter 'No'.")
if choice3 == str("Yes"):
userList.append(1)
else:
userList.append(0)
choice4 = input("Would you like to re-roll dice 4? If so, enter 'Yes'. If not, enter 'No'.")
if choice4 == str("Yes"):
userList.append(1)
else:
userList.append(0)
choice5 = input("Would you like to re-roll dice 5? If so, enter 'Yes'. If not, enter 'No'.")
if choice5 == str("Yes"):
userList.append(1)
else:
userList.append(0)
return userList
答案 0 :(得分:5)
一旦你意识到你一遍又一遍地编写相同的代码,你应该考虑如何自动化。在你的情况下,你的5个部分中唯一真正改变的是文本中的骰子编号,以及分配结果的变量。
所以第一步是让输入文本接受一个可变的骰子数。我们可以使用字符串格式:
"Would you like to re-roll dice {}? If so, enter 'Yes'. If not, enter 'No'.".format(i)
现在,i
的值将插入字符串中{}
的位置。
接下来,我们应该考虑那些choice
变量。如果你考虑一下,我们实际上并不需要单独的那些。毕竟,他们只捕获用户输入,并在我们评估值后立即忘记它们。所以我们可以将它们全部命名为choice
每次都覆盖输入。
因此,对于骰子编号i
,我们将其作为相关代码(另请注意str("something")
仅相当于"something"
):
choice = input("Would you like to re-roll dice {}? If so, enter 'Yes'. If not, enter 'No'.".format(i))
if choice == "Yes":
userList.append(1)
else:
userList.append(0)
现在唯一改变的是i
的值,它应该从1
变为5
。所以我们使用循环,这就是全部:
def askTheUser():
userList = []
for i in range(1, 6):
choice = input("Would you like to re-roll dice {}? If so, enter 'Yes'. If not, enter 'No'.".format(i))
if choice == "Yes":
userList.append(1)
else:
userList.append(0)
return userList
顺便说一下。当你收集“决定”是否重新掷骰子时,实际上更有意义的是存储布尔值True
和False
而不是1
和0
。因此,您可以添加True
或False
代替:
if choice == "Yes":
userList.append(True)
else:
userList.append(False)
在这种情况下,您可以直接追加比较结果:
userList.append(choice == "Yes")
然后,当您稍后检查值时,您可以if decision == 1
执行if decision
,而不必检查{{1}}。
答案 1 :(得分:0)
def askTheUser():
userList = []
for i in range(5):
choice = raw_input("Would you like to re-roll dice "+str(i)+"? If so, enter 'Yes'. If not, enter 'No'.")
if choice == str("Yes"):
userList.append(1)
else:
userList.append(0)
return userList
请检查!!
答案 2 :(得分:0)
def askTheUser():
userList=[]
for i in range(5):
choice = input("Would you like to re-roll dice %d? If so, enter 'Yes'. If not, enter 'No'."%(i+1))
userList.append(1 if choice == 'Yes' else 0)
return userList
答案 3 :(得分:0)
这样可行。
def askTheUser():
userList = []
for i in range(1,6):
question = "Would you like to re-roll dice " + str(i) + "? If so, enter 'Yes'. If not, enter 'No'."
choice = input(question)
if choice == str("Yes"):
userList.append(1)
else:
userList.append(0)
return userList