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

2024-04-26 21:05:20 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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)

Tags: thenumbernewifrandomrootwindowupper
1条回答
网友
1楼 · 发布于 2024-04-26 21:05:20

你有一些问题

  1. 您需要在末尾调用root.mainloop(),这样会出现一个窗口

  2. 您的capi_sentence函数接受一个参数,但按下按钮时调用的回调函数不提供参数

使用

button1 = tk.Button(text='hoofdletter shufflen', command=lambda: capi_sentence(entry1.get()))

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

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

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

    label1 = tk.Label(root, text=new_sentence)
    label1.pack()

一些杂项提示:

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

您可以使用enumerate删除显式number逻辑,该逻辑返回元组列表(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

相关问题 更多 >