我正在尝试在循环内编辑全局变量cowsbulls,但收到此错误"SyntaxError: name 'cows' is assigned to before global declaration"

import random

random_no = random.sample(range(0, 10), 4)
cows = 0
bulls = 0
#random_num = ','.join(map(str, random_no))
print(random_no)
user_input = input("Guess the no: ")
for index, num in enumerate(random_no):
    global cows, bulls
    print(index, num)
    if user_input[index] == num:
        cows += 1
    elif user_input[index] in random_no:
        bulls += 1

print(f'{cows} cows and {bulls} bulls')

最佳答案

Python没有块作用域,只有函数和类引入了新的作用域。

因为这里没有功能,所以不需要使用global语句,cowsbulls已经是全局变量,而

您也有其他问题:

  • input()始终返回一个字符串。
  • 对字符串进行索引(您可以得到单个字符),确定要这样做吗?
  • user_input[index] == num始终为假; '1' == 1测试两种不同类型的对象是否相等;他们不是。
  • user_input[index] in random_no也总是会为假,您的random_no列表仅包含整数,没有字符串。

  • 如果用户要输入一个随机数,则将input()转换为整数,而不必理会enumerate():
    user_input = int(input("Guess the no: "))
    for num in random_no:
        if user_input == num:
            cows += 1
        elif user_input in random_no:
            bulls += 1
    

    09-27 22:27