python - 有没有办法创建在多个循环期间不会重置的变量?
问题描述
我最近一直在尝试编写一个代码,试图找出一个函数返回 1 的次数。
fin=open("gymnastics.in", 'r')
p=(fin.readline().split())
n=int("".join(map(str, p)))
rank=[]
for i in range(3):
line=fin.readline().strip().split()
rank.append([int(num) for num in line])
print(rank[1])
def good_pair(cow1, cow2):
global x
x=0
for i in range(3):
if rank[0].index(cow1)<rank[0].index(cow2) and rank[1].index(cow1)<rank[1].index(cow2) and rank[2].index(cow1)<rank[2].index(cow2):
return 0
elif rank[0].index(cow1)>rank[0].index(cow2) and rank[1].index(cow1)>rank[1].index(cow2) and rank[2].index(cow1)>rank[2].index(cow2):
x=x+1
return x
else:
return 0
print(good_pair(4, 3))
print(good_pair(4, 2))
print(good_pair(4, 1))
print(good_pair(3, 2))
print(good_pair(3, 1))
print(good_pair(2, 1))
print(good_pair(3, 4))
print(good_pair(2, 4))
print(good_pair(1, 4))
print(good_pair(2, 3))
print(good_pair(1, 3))
print(good_pair(1, 2))
这里我有 x 作为变量,但每次我调用函数时,x 的值都会被重置。有没有办法让它不重置并继续添加?
解决方案
你想保存状态。一种方法是向函数添加一个参数以传递x
. 在第一次调用时,使用默认值。在以后的调用中,使用最后返回的值。这通常比仅使用全局变量更好,因为代码的其他位可以使用相同的函数而不会相互干扰。
def good_pair(cow1, cow2, x=0):
for i in range(3):
if rank[0].index(cow1)<rank[0].index(cow2) and rank[1].index(cow1)<rank[1].index(cow2) and rank[2].index(cow1)<rank[2].index(cow2):
return 0
elif rank[0].index(cow1)>rank[0].index(cow2) and rank[1].index(cow1)>rank[1].index(cow2) and rank[2].index(cow1)>rank[2].index(cow2):
x=x+1
return x
else:
return 0
foo = good_pair(4, 3)
print(foo)
foo = good_pair(4, 2, foo)
print(foo)
类是保持状态的好方法。您可以将其更改为为您保留价值的类x
。
class GoodPair:
def __init__(self):
self.x = 0
def __call__(self, cow1, cow2):
for i in range(3):
if rank[0].index(cow1)<rank[0].index(cow2) and rank[1].index(cow1)<rank[1].index(cow2) and rank[2].index(cow1)<rank[2].index(cow2):
return 0
elif rank[0].index(cow1)>rank[0].index(cow2) and rank[1].index(cow1)>rank[1].index(cow2) and rank[2].index(cow1)>rank[2].index(cow2):
self.x += 1
return self.x
else:
return 0
good_pair = GoodPair()
print(good_pair(4, 3))
print(good_pair(4, 2))
__call__
当您将类实例视为函数时使用该方法。
推荐阅读
- python-3.x - 在 Python 中 OSM XML 到 GEOJSON
- environment-variables - Gatsby .env.production 变量 - 未定义
- wordpress - 当您启用 api 并提供密钥时,如何在 wordpress 中授权 google 位置查找 acf 字段 - 仍然抛出 ApiTargetBlockedMapError
- excel - 使用 VBA 在公式中插入外部工作簿引用(由用户选择)
- java - 如何从 Android 设备(如 Google Pay 应用)获取用户名和电子邮件地址
- groovy - 常规三元运算符可以执行多个操作吗?
- javascript - 无缝缓冲内存 - 磁盘数据对象事物
- csv - 获取网络部分 csv 文件的响应
- node.js - 处理来自 facebook 的链接/推荐中断(Bot Framework v4)
- python - 将像素值返回为“无”