Python 难以控制的计划带来的困难
我已经在这个代码上工作了几个小时了,我很不确定问题出在哪里Python 难以控制的计划带来的困难,python,Python,我已经在这个代码上工作了几个小时了,我很不确定问题出在哪里 import random#imports random import os#Imports os print("Welcome to the maths quiz") # Welcomes user to quiz score = (0) def details(): plr_name = input ("Please Input Name:") # Asks user for name plr_class = i
import random#imports random
import os#Imports os
print("Welcome to the maths quiz") # Welcomes user to quiz
score = (0)
def details():
plr_name = input ("Please Input Name:") # Asks user for name
plr_class = input("Input class number: ") # Asks the user for class numer
return (plr_name, plr_class)
def Q():
while qno < 10: # loops while qno is under 10
ran_num1 = random.randint(1,99) # Generates the first random number
ran_num2 = random.randint(1,99) # Generates the second random number
ran_fun = random.choice("X-+") # Picks a random function
print(ran_num1,ran_fun,ran_num2,"=") # Prints the Sum for the user
if ran_fun == "X":
sum_ans = ran_num1 * ran_num2 # Does the sum if it is a multiplication
if ran_fun == "+":
sum_ans = ran_num1 + ran_num2 # Does the sum if it is a addition
if ran_fun == "-":
sum_ans = ran_num1 - ran_num2 # Does the sum if it is a subtraction
plr_ans = int(input()) # Gets the user's answer
if plr_ans == sum_ans:
print("Correct!") # Prints correct
score = score + 1 # Adds 1 to score
else:
print("Incorrect!")
qno = qno + 1 # Adds 1 to qno
def plr_list_make(lines, listoreder):
index = 0
plr_names =[]
plr_scores =[]
for line in lines:
if listorder == 1:
column =0
rev = False
else:
column = 1
rev = True
return sorted(zip(plr_names, plr_scores),key = lambda x:(x[column]),reverse = rev)
def fileUP(plr_name, score, line ):
found = False
index = 0
for line in lines:
if line.startswith(plr_name):
line = line.strip("\n") + ","+str(score+"\n")
lines[index] = line
found = True
index = index + 1
if not found:
lines.append(plr_name+"|" +str(score)+"\n")
return lines
def save (plr_name, plr_class, score):
filename = "QuizScore_"+plr_class+".txt"
try:
fileI = open(filename)
except IOError:
fileI = open(filename, "w+")
fileI = open(filename)
lines = fileI.readlines()
fileI.close
lines = FileUP(plr_name, score, lines)
fileO = open(filename, "w")
fileO.writelines(lines)
fileO.close
def disp_list(): ## intialise_list
student_list=[]
filename = "QuizScore_"+plr_class+".txt"
try:
## open file read into list "lines"
input_file = open(filename)
lines = input_file.readlines() ## read file into list "lines"
input_file.close
student_list = create_student_list(lines, listorder) ### update "lines" with student list as requested by user
## output sorted list
for counter in range(len(student_list)):
print ("Name and Score: ", student_list[counter][0], student_list[counter][1])
except IOError:
print ("no class file!!!")
def menu():
print ("1 Test")
print ("2 Alphabetical")
print ("3 Highscore")
print ("4 Avg Score")
def Run():
selection = 0
while selection != 5:
menu()
option = int(input("Please select option: "))
if option == 1:
name, plr_class = details()
save(name, plr_class, Q())
else:
plr_class = input("input class ")
disp_list(plr_class, option-1)
Run()
import random#导入random
导入操作系统#导入操作系统
打印(“欢迎参加数学测验”)#欢迎用户参加测验
分数=(0)
def details():
plr_name=input(“请输入名称:”)#要求用户输入名称
plr_class=input(“输入类号:”)#向用户询问类号
返回(plr_名称、plr_类)
def Q():
当qno<10时:#当qno小于10时循环
ran_num1=随机。randint(1,99)#生成第一个随机数
rand_num2=random.randint(1,99)#生成第二个随机数
ran_fun=random.choice(“X-+”)选择一个随机函数
打印(ran_num1、ran_fun、ran_num2,“=”)#为用户打印总和
如果run_fun==“X”:
sum_ans=ran_num1*ran_num2#如果是乘法,则求和
如果run_fun==“+”:
sum_ans=ran_num1+ran_num2#如果是加法,则求和
如果ran_fun==“-”:
sum_ans=ran_num1-ran_num2#如果是减法,则求和
plr_ans=int(input())#获取用户的答案
如果plr=总和:
打印(“正确!”)#打印正确
分数=分数+1#分数加1
其他:
打印(“不正确!”)
qno=qno+1#qno加1
def plr_列表制作(行、列表编辑器):
索引=0
plr_名称=[]
plr_得分=[]
对于行中的行:
如果listorder==1:
列=0
rev=假
其他:
列=1
rev=真
返回排序(zip(plr_名称,plr_分数),key=lambda x:(x[列]),reverse=rev)
def文件(plr_名称、分数、行):
发现=错误
索引=0
对于行中的行:
如果行开始(plr\U名称):
line=line.strip(“\n”)+”,“+str(分数+”\n”)
行[索引]=行
找到=真
索引=索引+1
如果未找到:
行。追加(plr_name+“|”+str(score)+“\n”)
回程线
def保存(plr_名称、plr_类别、分数):
filename=“QuizScore_u”+plr_class+”.txt”
尝试:
fileI=打开(文件名)
除IOError外:
fileI=open(文件名为“w+”)
fileI=打开(文件名)
lines=fileI.readlines()
文件I.关闭
行=文件(plr_名称、分数、行)
fileO=open(文件名为“w”)
文件写入线(行)
文件关闭
def disp_list():##初始化_list
学生名单=[]
filename=“QuizScore_u”+plr_class+”.txt”
尝试:
##打开文件读取到列表“行”
输入文件=打开(文件名)
lines=输入_file.readlines()##将文件读入列表“行”
input_file.close
学生列表=创建学生列表(行,列表顺序)####根据用户请求使用学生列表更新“行”
##输出排序列表
对于范围内的计数器(len(学生列表)):
打印(“姓名和分数:”,学生名单[计数器][0],学生名单[计数器][1])
除IOError外:
打印(“无类文件!!!”)
def菜单():
打印(“1次测试”)
打印(“按字母顺序2”)
打印(“3高分”)
打印(“4平均分数”)
def Run():
选择=0
选择时!=5:
菜单()
option=int(输入(“请选择选项:”)
如果选项==1:
名称,plr_class=details()
保存(名称,plr\u类,Q())
其他:
plr_类=输入(“输入类”)
显示列表(plr类,选项1)
运行()
错误:
回溯(最近一次呼叫最后一次):文件“C:\Users\user\Documents\CharlieStockham\cgsca\ca2.py”,第117行,在 运行()
文件“C:\Users\user\Documents\CharlieStockham\cgsca\ca2.py”,第113行,正在运行 保存(名称,plr\u类,Q())
文件“C:\Users\user\Documents\CharlieStockham\cgsca\ca2.py”,第74行,保存 行=文件(plr_名称、分数、行) NameError:未定义全局名称“FileUP” 第110行:
name, plr_class = details()
但是details
函数不返回任何内容,因此Python尝试将默认返回值None
分配给tuplename,plr\u类
。它不能这样做,因为None
不是一个iterable(您不能为它分配两件事)。要修复此问题,请将以下行添加到details
函数:
return (plr_name, plr_class)
(我还没有测试过。)第110行:
name, plr_class = details()
但是details
函数不返回任何内容,因此Python尝试将默认返回值None
分配给tuplename,plr\u类
。它不能这样做,因为None
不是一个iterable(您不能为它分配两件事)。要修复此问题,请将以下行添加到details
函数:
return (plr_name, plr_class)
(我还没有测试过这个。)我喜欢你的游戏,但作为mofo:p
score
和qno
未正确定义。在需要它们的函数中定义它们,全局定义它们或将它们作为参数传递给相关函数
details()
不返回任何内容,但您仍尝试使用其输出定义其他两个变量。将return(plr\u名称,plr\u类)
添加到details()
每次将用户输入转换为int而不检查其值时,如果无法转换int,程序将崩溃。这适用于以下情况:
option = int(input("Please select option: "))
这里
还有其他地方
由于您的程序输入量很大,您可以创建一个函数,将预期的数据类型和可选字符串传递给该函数,以便向用户显示。这样,您就不必编写try/except 10次,您的程序也不会因意外输入而崩溃
在def文件中(plr\u名称、分数、行):
您有行中的行:
,但未定义行。因此,调用FileUP()
的save()
函数也会失败。而且,FileUP
和FileUP
不是一回事。Y
disp_list(plr_class, option-1)