Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/351.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PYTHON:IF语句,其中包含文件中的参数无法正常工作_Python_File - Fatal编程技术网

PYTHON:IF语句,其中包含文件中的参数无法正常工作

PYTHON:IF语句,其中包含文件中的参数无法正常工作,python,file,Python,File,我正在创建一个程序,用户可以设置一个良好的滚动机会。该变量存储在一个文件中,这样即使在关闭程序时也可以使用它。我的问题是,只有if语句的第一个状态被执行,我无法找出原因 file = open("rolltype.txt", "r") user = input("Enter what you want to roll[e.x: 2d8]: ") if file.readline() == "1": print("Favor") favor(user) elif file.read

我正在创建一个程序,用户可以设置一个良好的滚动机会。该变量存储在一个文件中,这样即使在关闭程序时也可以使用它。我的问题是,只有
if
语句的第一个状态被执行,我无法找出原因

file = open("rolltype.txt", "r")
user = input("Enter what you want to roll[e.x: 2d8]: ")
if file.readline() == "1":
    print("Favor")
    favor(user)
elif file.readline() == "2":
    print("AGAINST")
    against(user)
elif file.readline() == "3" or file.readline() == None:
    print("NEUTRAL")
    check(user)
file.close()
我以读取模式打开文件,在
if
语句中检查4种可能的情况,并调用相应的函数。 如果文件包含值
1
,则程序正确执行,如果不包含,则跳过
elifs

旁注:
if
中的
print()
用于调试。
谢谢你花时间阅读,也许你能帮上忙。好好休息一天

每次调用
file.readline()
,它都在读取文件中的下一行

因此,对于每个条件表达式,您将得到不同的结果

为了解决这个问题,您只需将值存储在变量中,并在条件表达式中检查:

user=input(“输入要滚动的内容[e.x:2d8]:”)
value=file.readline()
如果值==“1”:
打印(“人情”)
喜欢(用户)
elif值==“2”:
打印(“反对”)
反对(用户)
elif值==“3”或值==无:
打印(“中性”)
检查(用户)
file.close()文件

每次调用
file.readline()
它都会从文件中读取新行。这可以通过在if语句之前将其分配给变量来解决

line = file.readline()
if line == "1":
  print("Favor")
elif line == "2":
  print("Against")
elif line == "3":
  print("Nuetral")

然而,我不认为readline总是修剪尾随的空白。因此,我建议使用
file.readline().strip()

您的代码有两个问题

  • 文件中的
    readline()
    在行尾包含换行符。它永远不会匹配“1”或任何其他不以换行符结尾的字符串
  • 由于多次调用
    readline()
    ,每次都比较不同的行。每次执行
    readline()
    时,指针都会移动到下一行。如果文件没有包含足够的行,其中一些将返回空字符串,并且它也不会匹配任何内容
解决方案:在变量中调用一次
readline()
,然后使用
strip()
删除换行符(以及任何其他空格)


我不确定我是否理解你的问题,但我已经遇到了类似的情况。这是因为多次使用readline()。 你就不能用:

fileContent=file.readline()
用户=输入(“输入要滚动的内容[e.x:2d8]:”)
如果fileContent==“1”:
打印(“人情”)
喜欢(用户)
elif fileContent==“2”:
打印(“反对”)
反对(用户)
elif fileContent==“3”或fileContent==无:
打印(“中性”)
检查(用户)
file.close()文件

我不确定我的答案,因为我不明白你的文件是怎么写的

您可以使用字典来定义打印映射的值
print\u dct
,以及值到函数映射的值
func\u dct
您还可以将
一起使用来打开文件,这样就不需要显式关闭它


user = input("Enter what you want to roll[e.x: 2d8]: ")

print_dct = {"1": "Favor", "2": "AGAINST", "3": "NEUTRAL"}
func_dct = {"1": favor, "2": against, "3": user}


with open("rolltype.txt", "r") as file:
    value = file.readline()

    if value == None:
        print(print_dct['3'])
        check(user)

    elif value in print_dct:
        print(print_dct[value])
        func_dct[value](user)
tmp=file.readline()。

user = input("Enter what you want to roll[e.x: 2d8]: ")

print_dct = {"1": "Favor", "2": "AGAINST", "3": "NEUTRAL"}
func_dct = {"1": favor, "2": against, "3": user}


with open("rolltype.txt", "r") as file:
    value = file.readline()

    if value == None:
        print(print_dct['3'])
        check(user)

    elif value in print_dct:
        print(print_dct[value])
        func_dct[value](user)