【问题标题】:Why is the user's input not recognized as correct? [duplicate]为什么用户的输入不被识别为正确? [复制]
【发布时间】:2017-01-15 19:18:21
【问题描述】:

我的代码有问题。我对读取文件比较陌生,因此我不知道我的代码有什么问题。

# Flashcards

#Read from a file containing questions in the form question, answer


import random
import time

def __run__():
    read_file = open('state_capitals.txt','r')
    lines = read_file.readlines()
    ran_lines = random.randrange(0,49)
    string_lines = lines[ran_lines]
    global string_lines_split # To make debugging easier
    string_lines_split = string_lines.split(',')
    print(string_lines_split[1]) # Print correct answer
    usr_input = input(string_lines_split[0])
    if usr_input == str(string_lines_split[1]):
        print("Correct!")
    else:
        print("Incorrect")
        print(usr_input)

当我执行 run() 时,一切正常,直到我输入答案。系统提示我输入答案,当我输入答案时,即使我的答案与 string_lines_split1 中的答案完全相同,程序也会打印出我的答案是错误的。文本文档链接: http://web.mit.edu/jesstess/www/IntermediatePythonWorkshop/state_capitals.txt

>>>__run__()
Helena

MontanaHelena
Incorrect
Helena

感谢您阅读我的问题,并指导我找到解决方案。我期待与 stackoverflow 社区合作。

【问题讨论】:

  • string_lines_final 定义在哪里?

标签: python string file python-3.x input


【解决方案1】:

首先你的代码有错误:print(string_lines_final[1]) 应该是print(string_lines_split[1])

您的问题是string_lines_split[1] 中有一个尾随'\n' 导致比较失败。

尝试将string_lines = lines[ran_lines] 更改为string_lines = lines[ran_lines].rstrip()

【讨论】:

  • 如果尾随非换行相关的空格很重要,可能会将"\r\n" 传递给rstrip
  • 为了将来参考,去除空格如何修复代码?我假设删除空格会将代码转换为一行,如果这是正确的,那么随机函数的工作方式会有所不同吗?我非常感谢您的回答,并且正在尝试了解有关字符串方法的更多信息。
【解决方案2】:

即使我的答案与 string_lines_split1 中的答案完全相同,程序也会打印出我的答案是错误的

那么它们并不完全相同。你必须接受这一点,因为 Python 永远无法弯曲或弯曲。如果它们不一样但看起来一样,请尝试其他方法,直到找出原因。

提示:为什么文件是这样排列的:

Alabama,Montgomery
Alaska,Juneau
Arizona,Phoenix

而不是这个:

Alabama,MontgomeryAlaska,JuneauArizona,Phoenix

?

提示:将您输入的len() 与正确答案进行比较。

提示:逐个字符比较它们。也许打印character codes

【讨论】:

    【解决方案3】:

    所以当你读取文件时,read_file.readlines() 返回的列表是这样的:

    [...'West Virginia,Charleston\n', 'Wisconsin,Madison\n', 'Wyoming,Cheyenne']
    

    所以你的代码应该是这样的:

    def __run__():
        read_file = open('state_capitals.txt','r')
        lines = read_file.readlines()
        ran_lines = random.randrange(0,49)
        string_lines = lines[ran_lines]
        global string_lines_split # To make debugging easier
        string_lines_split = string_lines.split(',')
        print(string_lines_split[1]) # Print correct answer
        usr_input = input(string_lines_split[0])
        if usr_input == str(string_lines_split[1].rstrip()):
            print("Correct!")
        else:
            print("Incorrect")
            print(usr_input)
    

    【讨论】:

      猜你喜欢
      • 2021-07-30
      • 1970-01-01
      • 2019-02-23
      • 2015-12-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多