编写代码但需要使用while或for循环

时间:2014-03-01 02:55:23

标签: python

我的程序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

4 个答案:

答案 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

顺便说一下。当你收集“决定”是否重新掷骰子时,实际上更有意义的是存储布尔值TrueFalse而不是10。因此,您可以添加TrueFalse代替:

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