簡體   English   中英

我對變量做錯了什么?

[英]What am I doing wrong with the variables?

我想做一個小程序來改變句子的大小寫,讓它們聽起來很諷刺。 我想把它放在一個小框架中並使用本教程( 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)

你有幾個問題。

  1. 您需要在最后調用root.mainloop()以便出現 window 。

  2. 您的capi_sentence function 接受一個參數,但按下按鈕時調用的回調沒有給它一個參數。

利用

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

它使用entry1.get()的返回值調用您的 function 。

  1. 在正確傳遞文本后,第一行 capi_sentence 是不必要的(無論如何也沒有任何意義)。

  2. 您在創建label時使用了小寫 label。 您還需要傳入一個父窗口小部件(例如 root)並將文本作為text關鍵字參數傳入。 最后,需要通過打包的方式將其添加到 window 中。

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

一些雜項提示:

你不需要== 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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM