RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / user-331443

DeNRuDi's questions

Martin Hope
DeNRuDi
Asked: 2022-08-04 04:13:51 +0000 UTC

为什么在转换 BGR -> RGBA 时位图中的每 2 行像素都是白色的?

  • 0

UPD。尚未找到解决方案,并且在评论中,有人可能会说,一种水,它没有明确解决问题。他们在评论中写道,他们说,由于整数除法,我得到了这样的结果。如果我将除以 4,那么为什么我会得到一个带有覆盖像素的相似图像?有趣的是,在java我附加的链接的实现中 - 没有除以 4 并且结果正确显示。我还不明白为什么除以 4c++给我的图片比例是 1 比 1,而java没有它的比例是相同的。如果你没有在加号中写除以 4,那么我只能得到四分之一的图片,而且还有白线。

UPD2。找到解决方案。但是我只是想了解-为什么在加号中我们除以rowBytes4,而在我附加的链接中的那个例子中的java中-没有除法,只有+4。然而,结果是一样的。有什么问题,或者我在哪里错过了什么?

我需要将bgr-array 转换为rgb-array。我很想使用现有库中的实现,但它们对我的项目来说太慢了。

我有我自己的jni- 函数c++,它可以转换一个数组,或者更确切地说是Frame从FFmpegFrameGrabber,它将在转换为Bitmap. 我只从那里取这个包:

(ByteBuffer) frame.image[0]; // здесь кадр в bgr-формате

我知道 和 中有不同的转换器opencv,javacv但性能对我的项目非常重要,因为框架必须到达我的神经元。因此,转换为矩阵,然后通过Utils.matToBitmapor转换AndroidFrameConverter,延迟约为 50 ms,不适合我。虽然 native 方法matToBitmap非常快,但它不适合,因为转换javacv Mat到opencvMat需要 ~100ms,这很多。cvtColor不适合类似的问题,因为它需要一个矩阵作为输入。

c++我基于AndroidFrameConverter从方法编写了自己的转换器:

ByteBuffer bgr2rgba(ByteBuffer in, int width, int height, int stride, int rowBytes{...}

我只为 编写了一个转换器ARGB_8888,即每像素 4 个字节。现在我的代码需要大约 8-15 毫秒来转换。但我不明白我在哪里错过了每 2 行像素 yBitmap不显示的部分代码。由于我的专业不强,所以我整理了这段代码:

#include <jni.h>
#include <endian.h>

extern "C"
JNIEXPORT jbyteArray JNICALL Java_com_example_testcpp_MainActivity_frameToBitmap(JNIEnv *env, jobject thiz, jobject in,
                                                    jint width, jint height, jint imageStride,
                                                    jint rowBytes) {

 auto* buf = (uint8_t*)  env->GetDirectBufferAddress(in);

    int* new_buff = new int [4*width*height];

    int _width = width - 1;
    int _height = height - 1;

    for (int y = 0; y < height; y++) {
        int ro = y * imageStride;
        for (int x = 0; x < width; x++) {
            int rgb;
            if (x < _width || y < _height) {
                rgb = *(int*)(buf + y * imageStride + 3 * x);
            } else {
                int b = buf[ro + 3 * x    ] & 0xff;
                int g = buf[ro + 3 * x + 1] & 0xff;
                int r = buf[ro + 3 * x + 2] & 0xff;
                rgb = (r << 16) | (g << 8) | b;
            }
            new_buff[y / 4 * rowBytes + x] = htobe32((rgb << 8) | 0xff);
        }
    }
    jbyteArray jByteArray = env->NewByteArray((jsize)4*width*height);
    env->SetByteArrayRegion(jByteArray, 0, 4*width*height, reinterpret_cast<const jbyte*>(new_buff));
    delete[] new_buff;
    return jByteArray;
}

这是输出图像: 在此处输入图像描述

我在哪里犯c++了代码错误?

java函数调用:

Frame frame = grabber.grabImage();
ByteBuffer in = (ByteBuffer)frame.image[0];
Bitmap bmp = Bitmap.createBitmap(frame.imageWidth, frame.imageHeight, Bitmap.Config.ARGB_8888);
byte [] data = frameToBitmap(in, frame.imageWidth, frame.imageHeight, frame.imageStride, bmp.getRowBytes());
bmp.copyPixelsFromBuffer(ByteBuffer.wrap(data).position(0));

也许有人知道如何快速转换javacv Mat为opencv Mat然后通过快速的本机方法进行转换,Utils.matToBitmap以免创建自己的jni-function?很高兴听到更多关于如何优化和加速此代码的信息。

android java
  • 1 个回答
  • 118 Views
Martin Hope
DeNRuDi
Asked: 2022-08-11 17:56:16 +0000 UTC

SeekBar 发生变化时如何同步获取帧?

  • 2

这更像是一个建筑问题。

我正在开发一个使用FFmpegFrameGrabberfrom 包JavaCV来迭代视频帧的 android 应用程序。任务如下:当 SeekBar 移动时,将其设置bitmap为imageview。

好的,这是我尽可能简化的示例:

seekHandBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
            @Override
            public void onProgressChanged(SeekBar seekBar, int i, boolean b) {
               if (b) {
                    try {
                        grabber.setFrameNumber(i);
                        Bitmap bmp = Bitmap.createScaledBitmap(
                                converter.convert(grabber.grabImage()),
                                imageView.getWidth(), imageView.getHeight(), true);
                        // converter здесь - это AndroidFrameConverter();
                        imageView.setImageBitmap(bmp);
                    } catch (FFmpegFrameGrabber.Exception e) {
                        e.printStackTrace();
                    }
                }
            }

            @Override
            public void onStartTrackingTouch(SeekBar seekBar) {}

            @Override
            public void onStopTrackingTouch(SeekBar seekBar) {}

});

问题是,如果你grabImage()在移动时在主线程中使用它seekbar,会有轻微的延迟,这是你想要避免的。当然,你可以把这个放到一个方法onStopTrackingTouch中,但是我想试着弄清楚Bitmap在移动的时候如何改变它seekbar。

决定同时尝试Thread, and ExecutorService(我尝试了newCachedThreadPooland newSingleThreadScheduledExecutor,也许我在我的任务中错误地使用了它) and Runnable,但这一切都不起作用,因为queue需要某种同步 ( ) 时才会处理下一帧在上一个设置之后。所有这些解决方案本质上只是创建随机运行的新线程,例如,首先可以设置第 30 帧,然后再设置视频的第 25 帧。

可以做什么?也许需要使用一些东西synchronized?也许我在寻找信息时挖错了地方,或者错过了什么Executors?我最近在 中遇到了线程问题java,而且我一般是 Android 新手。

android java
  • 1 个回答
  • 52 Views
Martin Hope
DeNRuDi
Asked: 2022-06-24 06:43:23 +0000 UTC

VideoCapture 类中的 set() 方法是否有替代方法来设置所需的帧?

  • 3

UPD3。我认为这个问题将被关闭,我将不得不放弃设想的想法,因为据我了解,android 不存在可行的解决方案。我尝试了另一个javacv抓取器FFMPEGFrameGrabber,但它也没有设置我想要的框架。作为最后一次尝试,我将尝试直接在 github opencv 上提出另一个问题。我现在想知道的是 - 有没有其他方法可以只暴露所需的框架?

我正在创建一个android应用程序,它opencv通过VideoCapture. 我在几天内分析了大量网站以寻找我的问题,为什么和Videoio.CAP_PROP_FPS其他Videoio.CV_CAP_PROP_FRAME_COUNT常量总是返回0.0. android有人说它只opencv-android返回 2 个值(指向问题的链接,其中指明了源代码),其他人据称根本不打开视频。

如果我理解正确,那么实际上它VideoCapture通过 提取视频文件的元数据ffmpeg,但android由于短缺,它只是不想处理它,因为我认为这个文件(ffmpeg.so)。是的,我知道opencv-android不官方支持ffmpeg,但是网上有很多关于这个话题的答案,从他们那里我只找到了一篇或多或少有用的文章,如何连接opencv + ffmpeg(它已经过时了,所以不好)。

根据经验,我发现在计算机上连接 dll 库时:

System.loadLibrary("opencv_ffmpeg310_64.dll");

可以访问珍贵的常量CAP_PROP_FPS和CV_CAP_PROP_FRAME_COUNT方法capture.set();,这在我的项目中现在是非常必要的......如果你不包含这个库,那么它将总是返回 0.0。

我决定通过下载库来测试这个想法到极致com.github.wseemann:FFmpegMediaMetadataRetriever-core——事实上,它从视频中提取元数据,就像opencv在连接了 dll 的计算机上的程序一样。

决定尝试ffmpeg.so从源代码构建我们自己的 android 库ffmpeg。不幸的是,我至少在架构下构建失败,因为编译器在没有找到arm64-v8a的类型上给出了一堆错误。#include stdlib.h我一开始纠正了平庸的错误,但后来出现了更复杂的错误——我没有特别在c/中翻找。c++

谁遇到过类似的问题?它是如何解决的?也许JavaCV提供类似于get()方法set()的东西VideoCapture?set如果仍然可以通过其他库以某种方式解决对常量的访问,那么到目前为止我还没有以其他方式访问该方法,我无法为官方解决opencv。

尽管 20-22 岁,是否有关于ffmpeg为android 组装的真正明智的教程?!opencv我的想法是否与文件有关ffmpeg.so?互联网上真的没有人可以将收集到的*.so文件发布为 android 用于建筑arm64-v8a和其他吗?你不能抛出链接Stack Overflow——我几乎修改了这个主题的所有内容。

测试:

Android: 12
MinSDK: 26
OC: Windows 10/Linux Ubuntu
OpenCV: 4.5.5
FFmpeg: 4.4
Ndk: 21.4.7075529 (использовал эту версию, так как обычно туториалы использовали некоторые файлы, которые в новой версии были удалены)

UPD。

因此,我设法获取*.so了不同架构的文件,包括arm64-v8a. 我尝试按类型连接:

System.loadLibrary("ffmpeg"); // libffmpeg.so для arm64-v8a

但它仍然不能解决我的问题。也许您需要CMakeLists.txt在来自 opencv-android sdk 的文件中指定类似的内容:

add_library(ffmpeg SHARED path-to-lib/libffmpeg.so)
set_target_properties(ffmpeg PROPERTIES LINKER_LANGUAGE CXX)
target_link_libraries(ffmpeg)

正确的?为了结合 opencv 和ffmpeg?如果没有,如何将这些*.so文件的支持添加到 opencv 本身?

UPD2。

有趣的一件事是,在其中一个函数的控制台中显示了一条日志opencv,其中明确输入了未来常量的值CAP_PROP_FPS(即视频 fps):

但是服务器 API 似乎不想返回这个值,不清楚为什么会发生这种情况(可能是由于我在 1 pro link 中附加的问题source-code)。

据我了解,根据有关该方法的文档get(块return和note表示返回 0.0),opencv-android 代码没有显式实现,并且编写了这些常量的逻辑。即使是这样,那方法set()呢?有没有可能的解决方案?

java
  • 0 个回答
  • 0 Views
Martin Hope
DeNRuDi
Asked: 2022-03-10 23:45:04 +0000 UTC

我无法解析来自网站的数据

  • 4

您需要通过在搜索中替换其-code来解析来自站点的汽车数据。vin最有趣的开始于此,其解决方案已经花费了将近 4 天。解决方法必须是在使用时,aiohttp或requests// requests_html。scrapy

selenium不适合!

UPD3。(问题#1和#2解决了,可以直接进入问题3)

问题1:

当GET我请求时,我收到一条消息以包含JavaScript. 之前在解析网站的时候没有这个问题,可以拿到html网站的主页。可以做什么?我几乎爬遍了所有的论坛——我只找到了程序员的建议,比如“ так включи JS и будет работать”。

我得到的网站页面: 在此处输入图像描述

有一些用于解码slowAES.decrypt的键,以及代码本身JS。也许你可以以某种方式重现逻辑python来绕过这个限制?

问题2:

我查看了开发人员工具 - 为搜索传递了哪些数据:

常规GET-запрос,以及从 463 个字符生成的令牌:

在此处输入图像描述

一般来说,我没有费心在python中重写函数,而是使用js2py生成这个令牌的那个:

getToken = js2py.eval_js("""
function randomString(len) {
  var str = "";
  for (var i = 0; i < len; i++) {
    var rand = Math.floor(Math.random() * 62);
    var charCode = rand += rand > 9 ? (rand < 36 ? 55 : 61) : 48;
    str += String.fromCharCode(charCode);
  }
  return str;
}
""")

token2 = getToken(463)
print(token2)

但问题是,在传输所有这些数据时,搜索不起作用,该站点处于 invisible 的保护之下recaptcha。

我继续分析他们的网站代码。我找到了一个直接向服务器发出请求的函数(php-script):

function dle_do_search(a) {
    clearInterval(dle_search_delay);
    $("#searchsuggestions").remove();
    $("body").append("<div id='searchsuggestions' style='display:none'></div>");
    $.post(dle_root + "engine/ajax/controller.php?mod=search", {
        query: "" + a,
        user_hash: dle_login_hash
    }, function(a) {
        $("#searchsuggestions").html(a).fadeIn().css({
            position: "absolute",
            top: 0,
            left: 0
        }).position({
            my: "left top",
            at: "left bottom",
            of: "#story",
            collision: "fit flip"
        })
    });

在这种情况下a,这是传输的值,即vin汽车的代码。 dle_login_hash- 我相信这是会话哈希。在开发者工具中分析请求后,我发现了这个变量:

var dle_login_hash = 'fcab770449489970ce5bb3652037c19f7f24e73';

我试图将POST-request 复制到他们的服务器,但出现错误403(一直工作到出现第 1 个问题)。也许我错过了某种令牌,或者sessionid在传递它时,但它不在我上面给出的函数中。

我的代码:

import asyncio
import aiohttp
import json

headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) "
                  "Chrome/94.0.4606.71 Safari/537.36",
    "accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,"
              "application/signed-exchange;v=b3;q=0.9",
}


data = {
    "query": "5YJ3E1EA0JF042788",
    "user_hash": "fcab770449489970ce5bb3652037c19f7f24e73"
}

async def parse_vin_carsvin():
    url = f"https://bidfax.info/engine/ajax/controller.php?mod=search"
    async with aiohttp.ClientSession(headers=headers) as session:
        async with session.post(url, data=json.dumps(data)) as response:
            result = await response.text()
            print(result)


loop = asyncio.get_event_loop()
loop.run_until_complete(parse_vin_carsvin())

UPD。结果是重新创建了逻辑,但这只有在您从检查器中复制所有内容时才能直接进行。我检查了您需要的正确操作fort和searchkey。

UPD2。 我想通了密钥生成FORT,只有searchkey。

到目前为止,还无法弄清楚它是如何生成的。

UPD3。

问题3:

它很可能searchkey是由SlowAES上给出的函数之一形成的

有这样一个函数toHex(generatePrivateKey("сюда передается какой-то ключ", 16));——它很可能负责它的生成,但不清楚需要为密钥传递什么。试图发送和phpsessid-fort无济于事。也许toHex(slowAES.decrypt(c,2,a,b));是生成答案的函数,FORT但我经历了所有可能的 2401 组合(;7^4 = 2401有值a,,,,,,,,b)。事实上,需要的更少,因为事实证明这是解码的模式)。cphpsessidfort122aes

javascript
  • 3 个回答
  • 10 Views
Martin Hope
DeNRuDi
Asked: 2022-07-22 21:05:52 +0000 UTC

我无法登录网站,请求

  • 3

我正在履行订单,我需要通过脚本登录网站(只有requests,没有Selenium!)但无论我如何尝试,我都无法登录。答案来了

{'Message': 'Помилка авторизації: Логін або пароль зазначений невірно', 'Status': 'Error', 'ErrorCode': 2},虽然密码是正确的,但我可以通过网站登录,或者有时会得到:

Сессия была закрыта или неактивна.

如果您Network在浏览器中打开它并查看POST请求发送的数据,您会发现由于某种原因,它不是传输的密码,而是 32 个字符的值,据我了解session_id,但是如果您发送它,那么它也不会授权。什么时候需要为POST-request 传递真实密码?在检查器中,没有关于传输我的真实密码(它仅由 6 位或 8 位数字组成)的消息。 在此处输入图像描述

据我了解,您需要发出 1 个POST请求来获取sesion_id,然后是第二个 - 授权。session_id据我了解,这是您需要传输才能接收的数据:

在此处输入图像描述

编码:

import requests

user_agent = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.142 Safari/537.36'

session = requests.Session()
session.headers.update({'User-Agent': user_agent})


url = "https://mygreenway.co.ua/s/l/"
session.headers.update({'Referer': url})


auth = {
    "type": "auth",
    "action": "sessionkey"
}

ses = session.post(url, data=auth)
key = ses.json()['Key']
print(key)

data = {
    "type": "auth",
    "action": "login",
    "REMEMBER": "0",
    "NAME": "1234567",
    "PASSWORD": key
}

ses2 = session.post('https://mygreenway.co.ua/s/l/', data=data)
print(ses2.text)
with open("result.html", "w", encoding="utf-8") as f:
    f.write(ses2.text)
session.close()

UPD。我挖得更深了,看看请求是如何通过 JavaScript 实现的。在那里,考虑到 MD5 散列来传输密码,但即使创建了这样的散列,它仍然无法授权。也许我错误地收集了这个哈希值。我会尝试

req = {method:'post', dataType:'json', data:{type:'auth', action:'login', REMEMBER:($('#remembermeModal').prop('checked')==true?1:0), NAME:$('#nameModal').val(), PASSWORD:(MD5(key+MD5($('#passwordModal').val())))}};

python
  • 1 个回答
  • 10 Views
Martin Hope
DeNRuDi
Asked: 2021-11-11 19:11:29 +0000 UTC

我怎样才能使它在发送 3 张照片后只显示 1 条消息?

  • 0

假设用户在一条消息中发送了 3 张照片,您需要确保json在 3 之后只显示 1 条消息。它不符合我的想法,我需要坚持以了解最后一条消息何时到达。

发了3张照片就来了3张,3张json之后json就需要给用户发消息了,但是一般情况下是不知道会发多少张照片,可能是2张,也可能是5张。我写了一个小代码,但在我的情况下,bot.send_message(message.chat.id, 'Описание')如果我输入我的代码,它将显示 3 条消息或不显示任何内容return。您需要类似于 的东西message[-1],但它不起作用。告诉我如何实现这个?

代码示例:

@bot.message_handler(content_types=['photo', 'video'])  
def second(message):    
    specification = message.text
    if message.media_group_id:
        idphoto = message.photo[0].file_id
        conn, cursor = connecting()
        cursor.execute("INSERT INTO orders VALUES (?,?)", (message.chat.id, idphoto))
        conn.commit()
        #return # либо будет выводить 3 сообщения ниже, либо ни одного
    bot.send_message(message.chat.id, 'Описание')
python
  • 2 个回答
  • 10 Views
Martin Hope
DeNRuDi
Asked: 2021-11-05 00:56:35 +0000 UTC

如何在电报机器人中重新发送调查?

  • 0

大家好。我遇到了一个问题,我无法将定期匿名调查重新发送给机器人用户。如果你不断地调用方法send_poll,就会产生一个新的民意调查,并且投票数丢失,这对我来说是个问题。例子:

bot.send_poll(message.chat.id, 'Это опрос?', ['Да', 'Нет', 'Не знаю'])

我在互联网上找到了一个示例,其中telebot.types.Poll. 更准确地说,这不是一个对象,而是一个使用参数发送的字典poll

def send(message):
    poll = telebot.types.Poll(question='Это опрос?', options=['Да', 'Нет', 'Не знаю'])
    bot.send_poll(message.chat.id, poll=poll)

但问题是这个参数poll不在文档中,即使我运行代码,我也会得到TypeError: send_poll() got an unexpected keyword argument 'poll'.

问题是 - 我如何传递一个对象/字典,或者poll一个方法send_poll或一个已经存在的id 民意调查?

UPD。可以发送创建的调查,但结果仍然丢失。有人知道如何正确记录结果,以便民意调查统计数据显示在 Telegram 中吗?

python
  • 1 个回答
  • 10 Views
Martin Hope
DeNRuDi
Asked: 2020-09-13 19:55:26 +0000 UTC

如何修复 Windows 操作系统上的错误:找不到 ffprobe/avprobe 和 ffmpeg/avconv,请安装一个?

  • 0

我正在尝试将视频转换.webm为mp3,但出现错误 - ffprobe/avprobe and ffmpeg/avconv not found, please install one.Internet 上有解决此问题的方法,但它是在 Linux 或 macOS 上完成的。问题是 - 如何做同样的事情以便您可以转换音频,但只能在 OC Windows 上?我使用的是 Python 3.7.4,Windows 10。我尝试安装软件包pip install ffmpeg,pip install ffprobe但没有成功。

python
  • 1 个回答
  • 10 Views
Martin Hope
DeNRuDi
Asked: 2020-02-15 03:08:30 +0000 UTC

我正在编写一个带有 MySQL 数据库的电报机器人。我收到一个错误 - MySQL 连接不可用”

  • 0

我使用 pyTelegramBotAPI + python 3.7.6 库(Windows 10)。我写了相当大的代码,它有大量的 sql 查询。sql查询没有及时执行时出现该错误。我尝试在每次请求后打开/关闭光标,但这只是部分解决了我的问题。如何在代码中实现,让 sql 查询始终在用户采取任何行动之前完成,即添加某种显式等待?我将在代码中给出一个示例。

由于一切都发生在机器人的无限循环中,因此我的代码中的按钮一直在“监听”。如果用户同时快速点击两个按钮,就会出现错误。

if message.text == 'Пример 1':
        cursor = db.cursor()
        sql = "INSERT INTO orders (user_id,item) VALUES (%s,%s)"
        val = (message.chat.id ,'Пример 1')
        result = cursor.execute(sql, val)
        db.commit()  
        cursor.close()
        return next(message)
elif message.text == 'Пример 2':
        cursor = db.cursor()
        sql = "INSERT INTO orders (user_id, item) VALUES (%s,%s)"
        val = (message.chat.id,'Пример 2')
        result = cursor.execute(sql, val)
        db.commit()
        cursor.close()
        return for_shop(message)
python
  • 1 个回答
  • 10 Views
Martin Hope
DeNRuDi
Asked: 2020-02-10 02:18:49 +0000 UTC

如何从数据库中选择最后一行?

  • 0

这是数据库中的 2 行。我需要选择最后一个(使用python 3.7.6,windows 10)。如何正确更正我的 SQL 查询?也就是说,它应该是这样的: - 从找到的两个相同的行中选择最后一行(您需要依赖的不是 id,而是找到的结果的最后一行!) SELECT 'Где-то здесь должно быть условие, по которому выберется последняя строка'adress FROM orders WHERE user_id ='245' LIMIT 1'

python
  • 2 个回答
  • 10 Views
Martin Hope
DeNRuDi
Asked: 2020-12-17 22:01:57 +0000 UTC

如何查看通过蓝牙协议传输的字节?

  • 3

将近一年半之后,我再次决定回到这个问题。

我有一个任务:跟踪无线耳机上的按键,当收到某个包时,在代码中执行一些操作。

要完成此任务,首先我想使用Python3或C/C++(最好是选项 1)将所有包输出到控制台。

我怎样才能在代码中准确地使用这些包Python/C/C++?也就是说,它不应该是样式中的终端命令os.system('hcitool ...'),而是源代码。

通过“戳”的方法,我已经可以确定哪个包负责无线耳机上的按键。

我也尝试使用Wireshark(Windows),但顺便说一句,他没有抓到一个包。

我假设可以通过以下方式创建连接和Python3模块:socketLinux

socket.socket(socket.AF_BLUETOOTH, socket.SOCK_STREAM, socket.BTPROTO_RFCOMM),然后输出数据包进行分析。

没有必要显示代码(但最好在 上查看一个最低限度可重现的示例Python3)。至少把我引向正确的方向,在那里我可以读到它。顺便说一句,我在互联网上搜索并没有找到合理的结果。

python
  • 1 个回答
  • 10 Views
Martin Hope
DeNRuDi
Asked: 2020-11-07 21:54:43 +0000 UTC

如何回到循环(有条件地)检查?

  • 0

我希望用户只选择第一个或第二个值,如果他输入其他内容,则会出现一个题词,您需要选择提供的一个...我认为您需要使用 for 循环,但到目前为止我不知道该怎么做。在代码中,我已经注释了我无法弄清楚的内容。

tool = input()
tool_des = 1 
while tool_des == 1: 
if tool == str(1):
    tool = "Ручка"
    print("Что ж, ты выбрал ручку, похвально!")
    tool_des = 0
elif tool == str(2):
    tool = "Нож"
    print("Что ж, ты выбрал нож, похвально!")
    tool_des = 0
elif tool == # что нужно сюда написать, если пользователь введет что-то рандомное? 
    print("Ты не следуешь моим указаниям, выбери что-то одно...")
    print ("1)ручка \n2)нож")
    tools_des = 1
    #loop, не знаю, как вернуться снова на проверку, а goto использовать в коде не хочу
 print(tools)
input()
python
  • 1 个回答
  • 10 Views
Martin Hope
DeNRuDi
Asked: 2020-11-02 05:57:46 +0000 UTC

告诉我如何摆脱循环?

  • 0

我使用命令call m返回 m 标签,因为以某种方式编写相同的循环是不合理的。问题是:如何摆脱这样的循环(在这种情况下,call必须使用命令),如果您在循环之后与命令cmp(在命令之前call m)进行检查比较,则可能无法第二次参考循环......

code    segment                 
assume      cs:code, ds:code

start: 
add bh,0h       ; перевірка числа на парність
mov si,1h
mov cx,4h       
mov al,10h 
m:
mov ds:[si],al
inc si
inc al 
loop m
mov si,6h
mov cx,4h   
mov al,10h
call m
code    ends
end start
ассемблер
  • 1 个回答
  • 10 Views
Martin Hope
DeNRuDi
Asked: 2020-04-02 02:10:13 +0000 UTC

如何在 JFrame 中包含此代码?一切都在控制台中正确显示,但是在连接JFrame时,它给出了一个错误

  • 1

在JFrame中创建了两个字段,还有一个按钮。调用该方法时,字段 1 中的文本必须落入字段 2 并更改字符。程序启动,但当您在 ​​1 字段中输入一个字符时,程序崩溃。我无法弄清楚为什么编译器会抛出错误。还有一个并行的问题——调用Scanner方法时,我总是启动命令行和JFrame窗口,环境优先从命令行输入信息。使用什么方法让所有事情都只发生在一个弹出窗口中?

一段代码:

private void jButton1MouseClicked(java.awt.event.MouseEvent evt) {                                      
Scanner scanner = new Scanner(System.in); 
String pole_dlya_texta_1 = null;
String pole_dlya_texta_2 = null;
pole_dlya_texta_2 = scanner.nextLine();   
pole_dlya_texta_2 = pole_dlya_texta_2.replace("е", "s"); 
pole_dlya_texta_2 = pole_dlya_texta_2.replace("д", "k");
pole_dlya_texta_2.setText(pole_dlya_texta_1.getText());
}
java
  • 1 个回答
  • 10 Views
Martin Hope
DeNRuDi
Asked: 2020-03-27 03:39:35 +0000 UTC

我怎样才能使我输入的整个文本返回到 CS,而不是返回 1 个单词?

  • 1
package proverka_script;

import java.util.Scanner;

public class Proverka_script {
 public static void main(String[] args) {

  String myString = null;
  Scanner num = new Scanner(System.in);
  String a = myString;
  a = num.next();
  myString = a;
  String target = "e";
  String replacement = "c";
  String newString = myString.replace(target, replacement);
  int length = newString.length();
  System.out.println(newString + " " + length);

 }
}

当我在控制台输入信息时,例如,Hello World,我只会得到“Hcllo”,而 World 会丢失。怎么样,也许值得使用StringBuffer?

java
  • 1 个回答
  • 10 Views

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    我看不懂措辞

    • 1 个回答
  • Marko Smith

    请求的模块“del”不提供名为“default”的导出

    • 3 个回答
  • Marko Smith

    "!+tab" 在 HTML 的 vs 代码中不起作用

    • 5 个回答
  • Marko Smith

    我正在尝试解决“猜词”的问题。Python

    • 2 个回答
  • Marko Smith

    可以使用哪些命令将当前指针移动到指定的提交而不更改工作目录中的文件?

    • 1 个回答
  • Marko Smith

    Python解析野莓

    • 1 个回答
  • Marko Smith

    问题:“警告:检查最新版本的 pip 时出错。”

    • 2 个回答
  • Marko Smith

    帮助编写一个用值填充变量的循环。解决这个问题

    • 2 个回答
  • Marko Smith

    尽管依赖数组为空,但在渲染上调用了 2 次 useEffect

    • 2 个回答
  • Marko Smith

    数据不通过 Telegram.WebApp.sendData 发送

    • 1 个回答
  • Martin Hope
    Alexandr_TT 2020年新年大赛! 2020-12-20 18:20:21 +0000 UTC
  • Martin Hope
    Alexandr_TT 圣诞树动画 2020-12-23 00:38:08 +0000 UTC
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5