Python 3.6.2循环不像我想要的那样工作

时间:2017-10-27 15:02:17

标签: python python-3.x

我目前正在为我的GCSE课程编写一个代码,而且我仍然坚持使用我的for循环,它也包含一个if-else语句。 我已经在程序中做了类似于此的代码,它的工作完全正常,但由于某种原因,这部分没有,我想知道是否有人可以帮助我。

我要做的是制作一个测验类型程序,我需要帮助的部分是选择用户想要做的主题。 用户必须键入他们的首选主题,但如果他们输入错误的主题,或键入无效的内容,则程序应允许用户再次输入。 到目前为止,如果您第一次正确输入主题,程序将进入下一阶段。 但是,如果您第一次输入错误,它会要求用户再试一次。但如果您第二次输入正确,它将再次要求用户再试一次。而不是让程序让用户再次输入主题,即使它在正确输入的时候应该是有效的,我希望程序进入下一阶段。

可用科目:

subjects = []

algebra = ("algebra")
computing = ("computing")

subjects.append(algebra)
subjects.append(computing)

我需要帮助的部分:

with open("student_file.csv", "a+") as studentfile:
    studentfileReader = csv.reader(studentfile, delimiter = ',')
    studentfileWriter = csv.writer(studentfile, delimiter = ',')

print("Available subjects:\n-Algebra\n-Computing\n")
ChosenSubject = input("What subject would you like to do? ")
ChosenSubject.lower()

for i in range(2): 
    if ChosenSubject in subjects:
        print("\n")
        break

    else:
        print("\nPlease try again.")
        ChosenSubject == input("What subject would you like to do?")
        ChosenSubject.lower()

if ChosenSubject in subjects:
    print("working")

else:
    print("You keep typing in something incorrect.\nPlease restart the program.")

3 个答案:

答案 0 :(得分:1)

在else块中,您可能希望将'=='替换为'='。

你也想给用户两次尝试或继续询问他们,直到他们正确回答? (后者是我从你的问题中推断的,因为我建议继续使用)

答案 1 :(得分:0)

这不是最佳解决方案,但是因为您的学习,我会尽量保持与您的解决方案一样接近。您的问题是,调用ChosenSubject.lower()不会更改ChosenSubject中的实际值。

这是一个有效的例子:

print("Available subjects:\n-Algebra\n-Computing\n")
ChosenSubject = input("What subject would you like to do? ")

subjects = ["algebra", "computing"]
for i in range(2): 
    if ChosenSubject.lower() in subjects:
        print("\n")
        break

    else:
        print("\nPlease try again.")
        ChosenSubject = input("What subject would you like to do?") #not '=='


if ChosenSubject.lower() in subjects:
        print("working")

else:
    print("You keep typing in something incorrect.\nPlease restart the program.")

来自doc

  

此方法返回所有基于案例的字符串的副本   字符已经小写了。

答案 2 :(得分:0)

for循环只是遍历一组对象。考虑一个列表my_list = ['a', 'b', 'c']。在使用my_list循环的for上的每次迭代中,它按顺序提取其中一个元素而不重复。 range(2)相当于[0, 1]

试试这个:

print("Available subjects:\n-Algebra\n-Computing\n")


for i in range(2): 
    # `i` is 0 on first iteration and 1 on second. We are not using `i` anywhere since all we want is to loop :) 
    chosen_subject = input("What subject would you like to do? ")

    if chosen_subject.lower() in subjects:
        print("\n")
        break

if chosen_subject.lower() in subjects:
    print("working")

else:
    print("You keep typing in something incorrect.\nPlease restart the program.")