Python 我在变量方面做错了什么?

Python 我在变量方面做错了什么?,python,variables,tkinter,Python,Variables,Tkinter,我想做一个小程序来改变句子的大小写,让它们听起来很讽刺。我想把它放在一个小框架中,并使用了本教程()。我已经提取了它的一些代码并实现了它,但我认为我搞砸了 Shell不断地给我关于缺少变量的错误,我在代码中似乎找不到。你们中的一些人能找到我在哪里犯的错误吗 import random import tkinter as tk root= tk.Tk() root.title('hOofDleTteRdiNGes') canvas1 = tk.Canvas(root, width = 400,

我想做一个小程序来改变句子的大小写,让它们听起来很讽刺。我想把它放在一个小框架中,并使用了本教程()。我已经提取了它的一些代码并实现了它,但我认为我搞砸了

Shell不断地给我关于缺少变量的错误,我在代码中似乎找不到。你们中的一些人能找到我在哪里犯的错误吗

import random
import tkinter as tk

root= tk.Tk()
root.title('hOofDleTteRdiNGes')

canvas1 = tk.Canvas(root, width = 400, height = 300)
canvas1.pack()

entry1 = tk.Entry (root)
canvas1.create_window(200, 140, window=entry1)

def capi_sentence(sentence):
    sentence.lower = entry1.get()
    new_sentence = ''
    number = 0 #Dummy number for tracking

    for letter in sentence.lower():
        if len(new_sentence)<2: #Creates the first two letter
            random_number = random.randint(0,1) #This randomly decides if the letter should be upper or lowercase
            if random_number==0:
                new_sentence += letter.upper()
            else:
                new_sentence += letter
        else:
            if (new_sentence[number-2].isupper() and new_sentence[number-1].isupper() or new_sentence[number-2].islower() and new_sentence[number-1].islower())==True:
                #Checks if the two letters before are both upper or lowercase
                if new_sentence[number-1].isupper(): #Makes the next letter the opposite of the letter before
                    new_sentence += letter.lower()
                else:
                    new_sentence += letter.upper()
            else:
                random_number = random.randint(0,1)
                if random_number==0:
                    new_sentence += letter.upper()
                else:
                    new_sentence += letter
                
        number += 1 #Add one more to the tracking
     
    label1 = tk.label(new_sentence)

button1 = tk.Button(text='hoofdletter shufflen', command=capi_sentence)
canvas1.create_window(200, 180, window=button1)
随机导入
将tkinter作为tk导入
root=tk.tk()
root.title('hoofdrettinges')
canvas1=tk.Canvas(根,宽=400,高=300)
画布1.pack()
entry1=tk.Entry(根)
canvas1.create_window(200140,window=entry1)
def capi_句子(句子):
station.lower=entry1.get()
新句子=“”
编号=0#用于跟踪的虚拟编号
用于句子中的字母。小写()

如果len(新句子)你有一些问题

  • 最后需要调用
    root.mainloop()
    ,这样会出现一个窗口

  • 您的
    capi\u语句
    函数接受一个参数,但按下按钮时调用的回调函数不提供参数

  • 使用

    它调用您的函数,返回值为
    entry1.get()

  • 在正确地传递文本后,capi_句子的第一行是不必要的(而且无论如何也没有真正意义)

  • 您在创建标签时使用了小写的
    label
    。您还需要传入一个父窗口小部件(例如root),并将文本作为
    text
    关键字参数传入。最后,您需要通过打包将其添加到窗口中

  • 一些杂项提示:

    您不需要在条件结束时使用
    ==True
    ;如果为true,则if将已运行

    您可以使用
    枚举
    删除显式
    数字
    逻辑,该逻辑返回元组列表(i,item),其中item是列表中的原始项,i的索引从0到N-1。 我用这个(和其他简化)重写了下面的for循环,所以它更容易阅读

    for i, letter in enumerate(sentence.lower()):
      maybe_upper = letter.upper() if random.randint(0, 1) else letter
      if len(new_sentence) < 2: #Creates the first two letter
        new_sentence += maybe_upper
      else:
        l2, l1 = new_sentence[i - 2 : i]
        if (l1.isupper() and l2.isupper()) or (l1.islower() and l2.islower()):
          #Checks if the two letters before are both upper or lowercase
          new_sentence += letter.lower() if l1.isupper() else letter.upper()
        else:
          new_sentence += maybe_upper
    
    对于i,枚举中的字母(句子.lower()):
    如果random.randint(0,1)或者字母
    如果len(新句子)<2:#创建前两个字母
    新句子+=可能更高
    其他:
    l2,l1=新的句子[i-2:i]
    如果(l1.isupper()和l2.isupper())或(l1.islower()和l2.islower()):
    #检查前面的两个字母是大写还是小写
    新的_语句+=字母.lower(),如果l1.isupper(),否则为字母.upper()
    其他:
    新句子+=可能更高
    
    请添加错误消息:)哦,我完全忘了。我会提醒我这样做是在将来:)谢谢你的帮助,它现在的工作!
        label1 = tk.Label(root, text=new_sentence)
        label1.pack()
    
    for i, letter in enumerate(sentence.lower()):
      maybe_upper = letter.upper() if random.randint(0, 1) else letter
      if len(new_sentence) < 2: #Creates the first two letter
        new_sentence += maybe_upper
      else:
        l2, l1 = new_sentence[i - 2 : i]
        if (l1.isupper() and l2.isupper()) or (l1.islower() and l2.islower()):
          #Checks if the two letters before are both upper or lowercase
          new_sentence += letter.lower() if l1.isupper() else letter.upper()
        else:
          new_sentence += maybe_upper