gpt4 book ai didi

python - 具有不同条件语句的函数返回

转载 作者:行者123 更新时间:2023-12-01 01:22:51 24 4
gpt4 key购买 nike

我有一个简单的函数,我确实喜欢调用它并返回一些值。该函数内部有一个 if、elif 和 else 语句,目的是当 if 条件满足时,返回一些值,当 if 和 elif 不满足时,运行并显示 else 语句下的内容。我使用了小部件警报来标记并说明问题。

问题是:

1- 当函数调用时,它只返回 else 下的内容。尽管 if 语句已满足。

2-删除else下的所有代码行,只运行if和elif,如果满足条件则返回一些值,否则返回TypeError: 'NoneType' object is not iterable

代码:

from PyQt5 import QtCore, QtWidgets, QtGui

def fun( x, y, z):
X = x
Y = y
Z = z

for i in range(0,Z):
R = i * X/Y

if R == 10:
return R, i
elif 10 < R <= 45:
return R, i
else:
print('Error')
app = QtWidgets.QApplication([])
error_dialog = QtWidgets.QErrorMessage()
error_dialog.showMessage('Error!! change values')
app.exec_()
return R, i

使用这些值来满足条件。

result, prod = fun(10, 60, 100)
result, prod = fun(105, 60, 100)
result, prod = fun(10, 600, 100)

用else语句输入:

result, prod = fun(10, 60, 100)
print( result, prod)

使用 else 语句输出:

Error window shows up

Error
0.0 0

不带else语句的输入:

result, prod = fun(10, 60, 100)
print( result, prod)

不带 else 语句的输出:

10.0 60

我想保留所需的语句和返回值。感谢您的帮助

最佳答案

尝试

def fun( x, y, z):
X = x
Y = y
Z = z

R, i = 0, 0 # <- if Z<1 you will not enter the loop at all, and your original function will not return anything.
for i in range(0,Z):
R = i * X/Y

if R == 10:
return R, i
elif 10 < R <= 45:
return R, i

print('Error')
app = QtWidgets.QApplication([])
error_dialog = QtWidgets.QErrorMessage()
error_dialog.showMessage('Error!! change values')
app.exec_()
return R, i

您的else语句应该应用于for,而不是if。您的目的是遍历循环中的所有可能值,如果循环中的所有可能值不满足条件,则只会引发错误。

顺便说一句,将所有返回放在ifs中并不是一个好的风格。这样您就可以忽略一些罕见的情况并得到不良行为。这正是您收到 TypeError: 'NoneType' object is not iterable 的原因。您希望从函数中获取一个元组,但什么也没收到,因为程序退出函数时根本没有返回值。

关于python - 具有不同条件语句的函数返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53640519/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com