【发布时间】:2021-01-27 07:02:05
【问题描述】:
我正在尝试创建一个快速简单的函数来检查输入的值是否为 int/bool。我快速浏览了一下,甚至其他地方的解决方案也遇到了同样的问题。
我的测试脚本中有这个,它似乎可以工作,但是当将确切的代码复制到我的主程序时,它会返回输入的第一个值(比如我输入的是 hello 而不是一个数字,它会在之后以“hello”退出输入一个数字并将其保存到文件中)。
一个函数调用另一个函数会导致它失败吗?
我可以稍后发布我的实际代码,其中有很多调用,所以可能会很长。将首先尝试使用这些简短的示例,如果我们无法确定我可以发布长示例。
#option 1
import json
with open("settings.json", "r") as f:
pref_file = json.load(f)
def float_check(t):
if t.isdigit():
global prompt
prompt = float(t)
return #I have tried 'return prompt' too
else:
prompt = input ("Enter numerical value only:\n")
float_check(prompt)
prompt = input ("Enter a number: ")
float_check(prompt)
#I'm saving the value to JSON file.
#\\ settings.json
#{
# "o2_percent": 0.0
#}
pref_file["o2_percent"] = prompt
with open("settings.json", "w") as f:
json.dump(pref_file, f, indent=4)
在选项 2 中,我尝试从函数调用函数,因为我认为这是问题所在。但这似乎也有效。
#option 2
import json
def num_check(t):
if t.isdigit():
global prompt
prompt = float(t)
pref_file["o2_percent"] = prompt
with open("settings.json", "w") as f:
json.dump(pref_file, f, indent=4)
runit()
else:
prompt = input ("Enter numerical numer only:\n")
num_check(prompt)
def runit():
prompt = input ("enter a number: ")
num_check(prompt)
runit()
我找到了这个解决方案 (How to validate a users input to Numbers only?) 并对其进行了一些调整,但我遇到了完全相同的问题 - 我的主代码将在退出循环时返回输入的第一个值而不是数字。
输入号码:你好
输入数字:大象
输入号码:为什么
输入数字:5
将值保存到 settings.json "hello"
另外为什么第一个打印返回float,而第二个是str,我没有做进一步的处理?我对这一切都很陌生 - 如果在函数中使用变量,即使声明为全局变量,也会有一些奇怪的事情吗?
def mk_float(answer):
while True:
try:
answer = float(answer)
print (type(answer)) #returns float
break
except ValueError:
answer = input ("Enter number!")
answer = input ("number: ")
mk_float(answer)
print (type(answer)) #returns int
我准备好翻桌了。
编辑
这是我删除的评论,因为 Prune 指出这是一个单独的问题。但会将其放在编辑中,以便人们知道它所指的内容。
def t_check(prompt):
while True:
try:
prompt = int(prompt)
return int(prompt)
break
except ValueError:
prompt = input ("Enter a number only: ")
continue
prompt = input ("enter something: ")
t_check(prompt)
print (prompt)
print (type(prompt))
【问题讨论】:
-
我会推荐阅读ericlippert.com/2014/03/05/how-to-debug-small-programs。 如果在函数中使用变量,即使声明为全局变量,也会有一些麻烦 全局变量的使用和相互影响的名称无济于事。
标签: python