0

这是我的代码(抱歉代码混乱):

def main():
    pass

if __name__ == '__main__':
    main()
from easygui import *
import time
import os
import random
import sys

##multenterbox(msg='Fill in values for the fields.', title=' ', fields=(), values=())
msg = "Enter your personal information"
title = "Credit Card Application"
fieldNames = ["First name",'Last name','email',"Street Address","City","State","ZipCode",'phone','phone 2)']
fieldValues = []  # we start with blanks for the values
fieldValues = multenterbox(msg,title, fieldNames)
# make sure that none of the fields was left blank
def make(x):
    xys = x,".acc"
    xyzasd = str(xys)
    tf = open(xyzasd,'a+')
    tf.writelines(lifes)
    tf.writelines("\n")
    tf.writelines("credits = 0")
    tf.close
def add(x):
    nl = "\n"
    acc = ".acc"
    xy = x + acc
    exyz = xy
    xyz = exyz
    xxx = str(xyz)
    tf = open('accounts.dat',"a+")
    tf.writelines(nl)
    tf.writelines(xxx)
    tf.close

while 1:
    if fieldValues == None: break
    errmsg = ""
    for i in range(len(fieldNames)-1):
        if fieldValues[i].strip() == "":
            errmsg += ('"%s" is a required field.\n\n' % fieldNames[i])
    if errmsg == "":
        break # no problems found
    fieldValues = multenterbox(errmsg, title, fieldNames, fieldValues)
names = enterbox(msg= ('confirm FIRST name and the FIRST LETTER of the persons LAST name'))
##txt = "acc"
##na = str(name)
##name = (names)

life = ( str(fieldValues))
lifes = life,'\n'
herro = ("Reply was: %s" % str(fieldValues))
correct  = buttonbox(msg=(herro,'\n is that correct'),choices = ('yes','no','cancel'))


if correct == "yes":
    make(names)
    add(names)
elif correct == "no":
    os.system('openacc.py')
    time.sleep(0.5)
    sys.exit()
else:
    os.system('cellocakes-main.py')
    sys.exit()
os.system('cellocakes-main.py')

我不知道问题出在哪里,我很抱歉它的编程有多草率我有一块白板来帮助我对编程还是新手(我只有 13 岁)抱歉。就我个人而言,我认为问题出在 def add 区域的语法中,但因为我还是新手,我个人没有看到这个问题,我希望有一个更有经验的程序员帮助我。

4

2 回答 2

2

这是一个不直接回答您的问题的答案。

唉,注释字段仍然无法保存格式化代码,所以我选择了这种方式。

def main():
    pass

if __name__ == '__main__':
    main()

这是一个很好的编码模式,但你以一种无用的方式使用。

如果将其作为模块导入而不作为脚本执行,则应该防止执行这些内容。

尽管如此,总是使用它也不错,但是然后将代码放在main()函数中而不是在下面添加它。

fieldNames = ["First name",'Last name','email',"Street Address","City","State","ZipCode",'phone','phone 2)']

)太多了。

fieldValues = []  # we start with blanks for the values
fieldValues = multenterbox(msg,title, fieldNames)

第二行使第一行无用,因为您不在fieldValues中间使用。

如果您预计multenterbox()会失败并希望将[]其作为默认值,情况会有所不同。

def make(x):
    xys = x,".acc"
    xyzasd = str(xys)
    tf = open(xyzasd,'a+')
    tf.writelines(lifes)
    tf.writelines("\n")
    tf.writelines("credits = 0")
    tf.close

你已经被告知:x, ".acc"创建一个元组,而不是一个字符串。要创建字符串,请使用x + ".acc".

此外,您的close呼叫不是呼叫,因为它缺少(). 这只是引用函数并忽略值。

写这个的更好的方法是(请适当地命名你的变量)

    with open(xyzs, 'a+') as tf:
        tf.writelines(lifes)
        tf.writelines("\n")
        tf.writelines("credits = 0")

with 语句会自动关闭文件,即使发生错误。

此外,您使用writelines()错误:它应该采用一系列字符串并将每个元素写入文件。由于它没有在中间添加换行符,因此结果看起来相同。但是在您的情况下,它会分别写入每个字节,从而使其效率降低一些。

lifes此外,您可以从函数内部访问全局变量。只有在绝对必要的情况下,您才应该这样做。

def add(x):

这里和上面一样,加上

xy = x + acc
exyz = xy
xyz = exyz
xxx = str(xyz)

为什么?只需使用xy; 这两个分配没有任何用处,str()调用也没有用,因为你已经有了一个字符串。

for i in range(len(fieldNames)-1):
    if fieldValues[i].strip() == "":
        errmsg += ('"%s" is a required field.\n\n' % fieldNames[i])

更好的:

for name, value in zip(fieldNames, fieldValues):
    if not value.strip(): # means: empty
        errmsg += '"%s" is a required field.\n\n' % name

然后:

life = ( str(fieldValues))

从列表中创建一个字符串。

lifes = life,'\n'

从这两个字符串中创建一个元组。

os.system('openacc.py')

os.system('cellocakes-main.py')

请不要使用os.system(); 它已被弃用。更好地使用subprocess模块

于 2013-08-04T07:18:57.170 回答
1

问题的问题在这里:

# assign the tuple (x, ".acc") to xys 
xys = x,".acc"

# now xyzasd is the tuple converted to a string, thus
# making the name of your file into '("content of x", ".acc")'
xyzasd = str(xys)

# and open file named thus
tf = open(xyzasd,'a+')

你想做的是:

# use proper variable and function names!
def make_account(account):
    filename = account + '.acc'
    the_file = open(filename, 'a+')
    ....

另一方面,您的代码还有其他问题,例如

def main():
    pass

if __name__ == '__main__':
    main()

完全没用。

于 2013-08-04T06:21:25.303 回答