0

だから、私は PyQt で Python を使用していますが、非常に奇妙な問題があります。ある時点で OK と出力される文字列は、数行のコードの後では OK とは出力されません! これが私のコードです:

name = str(self.lineEdit.text().toUtf8())
        self.let_change = Search()
        name_no_ind = self.let_change.indentation(name)
        print(name_no_ind)
        name_cap = self.let_change.capital(name)
        name_low = self.let_change.lower(name)
        print(name_no_ind, name_cap, name_low)
        col = self.combobox.currentIndex()
        row = 0
        for i in range(0, self.tableWidget.rowCount()):
            try:
                find_no_ind = self.let_change.indentation(self.tableWidget.item(row, col).text())
                find_cap = self.let_change.capital(self.tableWidget.item(row, col).text())
                find_lower = self.let_change.lower(self.tableWidget.item(row, col).text())
                if name_no_ind or name_cap or name_low in find_no_ind or find_cap or find_lower:
                    self.tableWidget.setItemSelected(self.tableWidget.item(row, col), True)
                    print("Item found in %d, %d" % (row,col))
                row += 1
            except AttributeError:
                row += 1 

そして、ここに私が得るものがあります:

Αντωνης
('\xce\x91\xce\xbd\xcf\x84\xcf\x89\xce\xbd\xce\xb7\xcf\x82', '\xce\x91\xce\x9d\xce\xa4\xcf\x8e\xce\x9d\xce\x97\xce\xa3', '\xce\xb1\xce\xbd\xcf\x84\xcf\x8e\xce\xbd\xce\xb7\xcf\x82')
Item found in 0, 0

それは奇妙ではありませんか?問題なく印刷されますが、印刷されません。私に何ができるか知っている人はいますか?

PS: 関数は次のとおりです。

# -*- coding: utf-8 -*-
class Search():
    #A function that removes indentations: 
    def indentation(self, name):
        a = name
        b = ["ά", "Ά", "ή", "Ή", "ώ", "Ώ", "έ", "Έ", "ύ", "Ύ", "ί", "Ί", "ό", "Ό"] 
        c = ['α', 'Α', 'η', 'Η', 'ω', 'Ω', 'ε', 'Ε', 'υ', 'Υ', 'ι', 'Ι', 'ο', 'Ο']
        for i in b:
            a = a.replace(i, c[b.index(i)])
        return a

    # A function that makes letters capital:    
    def capital(self, name):
        a = name
        greek_small = ["α", "β", "γ", "δ", "ε", "ζ", "η", "θ", "ι", "κ", "λ", "μ", "ν", "ξ", "ο", "π", "ρ", "σ", "τ", "υ", "φ", "χ", "ψ", "ω", "ς"]
        greek_capital = ["Α", "Β", "Γ", "Δ", "Ε", "Ζ", "Η", "Θ", "Ι", "Κ", "Λ", "Μ", "Ν", "Ξ", "Ο", "Π", "Ρ", "Σ", "Τ", "Υ", "Φ", "Χ", "Ψ", "Ω", "Σ"]
        for i in greek_small:
            a = a.replace(i, greek_capital[greek_small.index(i)])
        return a
    #A function that makes letters lower:    
    def lower(self, name):
        a = name
        greek_small = ["α", "β", "γ", "δ", "ε", "ζ", "η", "θ", "ι", "κ", "λ", "μ", "ν", "ξ", "ο", "π", "ρ", "σ", "τ", "υ", "φ", "χ", "ψ", "ω", "ς"]
        greek_capital = ["Α", "Β", "Γ", "Δ", "Ε", "Ζ", "Η", "Θ", "Ι", "Κ", "Λ", "Μ", "Ν", "Ξ", "Ο", "Π", "Ρ", "Σ", "Τ", "Υ", "Φ", "Χ", "Ψ", "Ω", "Σ"]
        for i in greek_capital:
            a = a.replace(i, greek_small[greek_capital.index(i)])
        return a

基本的に、ギリシャ文字を大文字または小文字にします...

解決策!!!: スティーブは最初の問題を解決し、彼が言ったことに基づいて、すべてを解決するこれを思いつきました:

name = str(self.lineEdit.text().toUtf8())
        self.let_change = Search()
        name_no_ind = self.let_change.indentation(name)
        name_cap = self.let_change.capital(name)
        name_low = self.let_change.lower(name)
        name_list = [name, name_no_ind, name_cap, name_low]
        col = self.combobox.currentIndex()
        row = 0
        for i in range(0, self.tableWidget.rowCount()):
            try:
                item_ = str(self.tableWidget.item(row, col).text().toUtf8()) 
                find_no_ind = self.let_change.indentation(item_)
                find_cap = self.let_change.capital(item_)
                find_lower = self.let_change.lower(item_)
                item_list = [find_no_ind, find_cap, find_lower]
                for x in name_list:
                    for y in item_list:
                        if x in y:
                            self.tableWidget.setItemSelected(self.tableWidget.item(row, col), True)
                row += 1
            except AttributeError:
                row += 1
4

1 に答える 1

1

入力パラメーターの名前を使用するか、場合によってはエンコーディングを変更することで、どちらself.let_change.capital(name)かが上書きされていると言えます。self.let_change.lower(name)あなたはそれらのコードを投稿していないので、私には確信が持てません。

申し訳ありませんが、それらは問題ではありません。問題は、それらを異なる方法で印刷していることです。

>>> print(capital(name))
ΑΝΤΩΝΗΣ
>>> print(capital(name), name)
('\xce\x91\xce\x9d\xce\xa4\xce\xa9\xce\x9d\xce\x97\xce\xa3', '\xce\x91\xce\xbd\xcf\x84\xcf\x89\xce\xbd\xce\xb7\xcf\x82')
>>> print(capital(name))
ΑΝΤΩΝΗΣ
>>> print(name, name)
('\xce\x91\xce\xbd\xcf\x84\xcf\x89\xce\xbd\xce\xb7\xcf\x82', '\xce\x91\xce\xbd\xcf\x84\xcf\x89\xce\xbd\xce\xb7\xcf\x82')
>>> print(name,)
('\xce\x91\xce\xbd\xcf\x84\xcf\x89\xce\xbd\xce\xb7\xcf\x82',)
>>> print(name)
Αντωνης
>>> print("%s = %s" % (name, capital(name)))
Αντωνης = ΑΝΤΩΝΗΣ
>>> 

そのため、別の印刷ステートメントを使用するか、フォーマット文字列を使用する必要があります。

于 2013-07-20T13:50:15.313 に答える